什么是SQL的聚合函数?COUNT、SUM等函数的详解

上周看你那个SQL文档。
写的挺细的。

COUNT、SUM、AVG... 都列清楚了。

GROUPBY也配了例子。
多聚合函数组合也写到了。

HAVING筛选和CASE语句... 也都有。

挺好的。
你看着办。

sql中常用的聚合函数有哪些

哎,聚合函数啊... 就是把一堆数给加起来或者找找最大最小那种。

比如... SUM(salary)... 这个吧... 比如我在北京,查一下2 02 2 年某个公司所有员工的工资总和... 那就用SUM(salary)... 查出来的结果就一个数,多少多少钱,比如总共是8 00万。

然后AVG(score)... 这个是算平均分... 比如我在上海,查一下2 02 2 年某学校一次考试所有学生的平均分... 那就用AVG(score)... 查出来可能是8 5 分那么一个结果。

MIN(price)... 这个是找最便宜的... 比如我在深圳,查一下2 02 2 年某个电商平台上所有手机里最便宜的一个多少钱... 那就用MIN(price)... 查出来可能是9 9 9 块。

MAX(hire_date)... 这个是找最早入职的日期... 比如我在广州,查一下2 02 2 年某公司最早入职的那个员工是哪天入职的... 那就用MAX(hire_date)... 查出来可能是2 02 0年1 月1 日。

COUNT()... 这个是比较诡异的,是算总行数... 不管是空的还是不空的... 比如我在成都,查一下2 02 2 年某个表里一共有多少条记录... 那就用COUNT()... 可能查出来是1 000条。

COUNT(department)... 这个就只算非空的... 比如我在杭州,查一下2 02 2 年某个公司有多少个不同的部门... 那就用COUNT(department)... 可能查出来是1 0个部门。

那个COUNT(DISTINCT)... 比如我在武汉,查一下2 02 2 年某个公司有多少个不同的员工工号... 那就用COUNT(DISTINCT employee_id)... 可能查出来是5 00个。

还有GROUP_CONCAT... 这个比较麻烦... 比如我在南京,查一下2 02 2 年某个公司每个部门所有员工的姓名,名字之间用逗号隔开... 那就用GROUP_CONCAT(name SEPARATOR ',')... 查出来每个部门会是一个长字符串,名字一个接一个的。

BIT_AND... 这个我搞不太懂... 可能是位运算吧... 比如我在天津,查一下某个设置表里所有flag的按位与结果... 那就用BIT_AND(flags)... 查出来是一个整数值。

GREATEST... 这个是找最大的那个... 比如我在重庆,查一下某个商品表里三个价格price1 , price2 , price3 中的最大值... 那就用GREATEST(price1 , price2 , price3 )... 查出来就是最大的那个价格。

我后来才反应过来... 聚合函数有时候用起来挺方便的... 但有时候也挺容易搞错的... 比如忘了加GROUP BY... 就会报错... 我当时也懵。

而且... 每个数据库对函数的支持可能不一样... 比如MySQL有GROUP_CONCAT,SQL Server有STRING_AGG... 这个得注意... 可能我偏激... 觉得用惯了MySQL就忘了其他数据库了。

总之... 聚合函数... 加总、找最值、数个数... 搞数据统计用得比较多... 2 02 2 年... 某个城市... 多少量... 多少钱... 这些都能查出来。

sql中聚合函数有哪些

哦对,聚合函数啊... 2 02 2 年的时候我还在用这个。

比如 COUNT() 这个... 对吧,就是数个数。
我之前在一个小公司,做月报,表挺大的,几千条记录。
用 COUNT() 就能快速知道一个月总共多少订单,或者多少用户活跃。
记得当时那个报表,写了个 SELECT COUNT() FROM orders WHERE date BETWEEN '2 02 2 -01 -01 ' AND '2 02 2 -01 -3 1 '; 这样就出来了,多少订单,就比如... 嗯... 好像是个 8 6 00 多的样子,忘了具体数字了,不重要。
关键是能数出来。

SUM() 就是加法。
比如要算某个城市 2 02 2 年全年的销售额。
表里可能有 city 和 amount 这两列。
就用 SUM(amount) WHERE city = '上海' AND YEAR(date) = 2 02 2 ; 这样就能加出来,上海一年卖了多少钱,可能是个几百万,具体多少钱又忘了,就感觉... 挺大的样子。

AVG() 平均值。
比如想知道 2 02 2 年平均每个订单多少钱。
就选 AVG(amount) FROM orders WHERE YEAR(date) = 2 02 2 ; 这样就得到个平均数,比如 8 5 块钱一个订单?也可能不是,反正是个平均值。

MIN() 和 MAX() 就取最小最大值。
比如查一下 2 02 2 年哪个城市卖的最贵,哪个最便宜。
用 MAX(amount) WHERE YEAR(date) = 2 02 2 ; 或者 MIN(amount); 查出来,北京最贵,可能 2 00 多一单?上海最便宜,可能 2 0 多?具体记不清了。

GROUP_CONCAT() 这个... 用得没那么频繁。
有时候需要把一个分组里的所有名字都列出来,用逗号隔开。
比如 SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM customers GROUP BY region; 就能把华北区的所有客户名都串起来,像个长字符串。

STDDEV() 和 VARIANCE() 是标准差和方差。
这个我理解得有点模糊... 可能是看数据分布吧?比如销售额的标准差,看是不是波动很大。
用 SELECT STDDEV(amount) FROM orders WHERE YEAR(date) = 2 02 2 ; 能知道销售额的离散程度。

COUNT(DISTINCT) 这个挺有用的,数唯一值。
比如查查 2 02 2 年有多少个不同的国家用户买了东西。
SELECT COUNT(DISTINCT country) FROM orders WHERE YEAR(date) = 2 02 2 ; 可能结果是个 5 0 多,有 5 0 多个国家来买东西。

嗯... TOP(N) 这个... 我用得比较少,可能别的数据库有,SQL 标准里好像没这玩意儿?或者我记混了?好像不是标准聚合函数。

GROUP BY 是关键,必须跟它一起用。
没 GROUP BY,聚合函数就乱算了。
我当时也懵,刚学的时候,一个 SELECT department_id, COUNT() FROM employees GROUP BY department_id; 看着就感觉... 嗯,这样是对的,但为啥这样就行,我不理解。
后来才反应过来,就是把 department_id 相同的放一起,再数数有几个。

就是这些,用得多了就习惯了。
有时候写 SQL 写久了,就感觉... 就那么回事吧。