sql distinct 是取第一条吗_从零学DAX/Sql/Python030202SQL数据分类汇总

本文介绍了SQL中的ORDER BY用于结果排序,GROUP BY用于分类汇总,强调了GROUP BY后的列名需与SELECT一致。还提到了GROUP BY WITH ROLLUP/CUBE的使用,帮助理解数据分组操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

f2777dee8fe150494b0e67e797478051.png   点击“数字化审计”,可以关注哦!

开篇啰嗦话

前文已经介绍了Select基本语法和如何对表进行概览,今天继续为你介绍新的内容。

从零学DAX/Sql/Python之SQL篇文章索引

1

SQL系列-01-数据库及SQL Server基本操作

2

SQL系列-02-SQL Server基本介绍及SSMS

3

SQL系列-03-SQL与Python集成编辑工具ADS

4

SQL系列-04-Select语法、别名、概览数据

5

今天主要介绍:排序、去重(取唯一值)、分类汇总及聚合函数。 

01.order by 排序

通常,我们需要对显示结果进行排序,排序语法是

order by 列名 desc 或 asc,如果不写desc(降序)\ase(升序)则,默认是ase.

当有多个需排序列时,需单独为每个列指明desc或asc参数,列之间用英文逗号,分隔

---按指定列排序:order by 列名 DESC-降序或ASC-升序-这是默认的
--当有多个需排序列时,需单独为每个列指明desc或asc参数
---按年度升序排列
select a.订单号,a.公司名称,a.供应商名称,a.日期,a.金额 from [samples].[dbo].[采购明细] as a 
order by  a.日期 

--按照金额降序排列
select a.订单号,a.公司名称,a.供应商名称,a.日期,a.金额 from [samples].[dbo].[采购明细] as a 
order by  a.金额 desc  

--按照年度升序和金额降序排列
select a.订单号,a.公司名称,a.供应商名称,a.日期,a.金额 from [samples].[dbo].[采购明细] as a 
order by  a.年度 ,a.金额 desc  
02.distinct-去重或取唯一值我们经常需要了解某些特定列包含某些信息,例如合同的招标方式有哪些、订单类型有哪些,等等。其语法是:distinct 列名
---查看唯一值,也叫去重
select distinct cgmx.招标方式 from [samples].[dbo].[采购明细] cgmx
select distinct cgmx.供应商性质 from [samples].[dbo].[采购明细] cgmx
下图是执行结果

53a84f595bfc59ec91f573be024911f8.png

03.group by 分类汇总

分类汇总基本语法是Select 列名1,列名2,..,聚合函数  From 表名group by 列名1,列名2,….

 特别注意:group by后面的列名。必须出现在select后面

在实际过程中,我们经常需要进行各种分类汇总,例如,不同年度的采购额,不同客户的销售额,不同产品的均价、最高价、最低价,不同年度、不同客户的合同份数、合同金额等等,这涉及到两个问题:一是分组,这需要用”group by 列名”;二是聚合运算,如求和sum,计数 count,不重复计数count(distinct列名),最小值min,最大值max,平均值avg。
--分类汇总及聚合函数的应用
--特别注意:group by后面的列名。必须出现在select后面
--1.仅按年度,统计不同年度的采购数量和采集金额
select cgmx.年度,sum(cgmx.数量) as 数量,sum(cgmx.金额) as 金额
from [samples].[dbo].[采购明细] cgmx
group by cgmx.年度

--2.仅按年度,统计不同年度的采购数量、采集金额、均价、最高阶和最低价
select cgmx.年度,count(cgmx.订单号) as 订单数,
min(cgmx.不含税单价) as 最低价,AVG(cgmx.不含税单价) as 均价,max(cgmx.不含税单价) as 最高价,
sum(cgmx.数量) as 采购数量,sum(cgmx.金额) as 采购金额
from [samples].[dbo].[采购明细] cgmx
group by cgmx.年度

--3.仅按年度和公司名称两个维度,统计不同年度、不同公司的采购数量、采集金额、均价、最高阶和最低价
select cgmx.年度,cgmx.公司名称,count(cgmx.订单号) as 订单数,
min(cgmx.不含税单价) as 最低价,AVG(cgmx.不含税单价) as 均价,max(cgmx.不含税单价) as 最高价,
sum(cgmx.数量) as 采购数量,sum(cgmx.金额) as 采购金额
from [samples].[dbo].[采购明细] cgmx
group by cgmx.年度,cgmx.公司名称

其效果如下图所示

6ac969d59b8d3ff73ee8fba3a0057e2d.png

04.group by with rollup/cube

当分组列超过2个时,有时不仅要进行分类汇总,还需要进行小类汇总和合计汇总,这可以用with rollup 或with cube两个参数。这两个参数的意思,你只有自己跑一遍,才可以深刻体会。下面直接给出语句和效果图
--4.仅按年度和公司名称两个维度,利用rollup进行,统计不同年度、全部年度的聚合值
---先汇总公司汇总,在按不同年度再汇总,再汇总全部
select cgmx.年度,cgmx.公司名称,count(cgmx.订单号) as 订单数
,sum(cgmx.金额) as 采购金额 from [samples].[dbo].[采购明细] cgmx
group by cgmx.年度,cgmx.公司名称  with rollup

5707798cb95efd21a587d1508fd0f86f.png

Group by with cube

select cgmx.年度,cgmx.公司名称,count(cgmx.订单号) as 订单数,
sum(cgmx.金额) as 采购金额 from [samples].[dbo].[采购明细] cgmx
group by cgmx.年度,cgmx.公司名称  with cube

6edab139f1f25a8d63bbe9f4a6f83ab5.png

Group by的用法还有很多,今天就先介绍到这里。下一次会为你对group by 的结果进行行列转换展示,这也是实际工作中经常要用的方法,如下图所示的样子,把年度放在列上。

d9508fb188c6774e72cc54229cc2a13a.png

敬请期待下一篇!

随着轻轻的风轻轻地飘

历经的路都会刻骨铭心

如果你觉得有用,记得点击右下角“在看”按钮,并写下宝贵的意见,也可在公众号下扫码加群

欲见详情,静候下文599f4c5e0e4ad348b5c680632ca45a3f.gifbf7eef11ed9f80250fdbe3089ac35c6f.png

原创文章欢迎转载!

请注明:本文首发于

"数字化审计"公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值