2.1 聚合函数
2.1.1 5个常用的汇总函数
COUNT 计算表中的记录数(行数)
SUM 计算表中数值列中数据的合计值
AVG 计算表中数值列中数据的平均值
MAX 求出表中任意列中数据的最大值
MIN 求出表中任意列中数据的最小值
2.1.2 COUNT
COUNT(*) 得到包含NULL的数据行数
COUNT(<列名>) 某一列不含NULL的行数
2.1.3 计算折合值
SUM(<列名>) 某一列的和值(NULL不计算在内)
AVG(<列名>) 某一列的平均值(NULL不计算在内)
MAX(<列名>) 某一列的最大值(NULL不计算在内)
MIN (<列名>) 某一列的最小值(NULL不计算在内)
2.1.4 聚合函数与DISTINCT联合使用
SELECT COUNT(DISTINCT product_type) FROM product
注: DISTINCT必须放在括号中,计算之前先去重
2.2 对表进行分组
2.2.1 GROUP BY 子句
SELECT product_type, COUNT(*) FROM product GROUP BY product_type
2.2.2 GROUP BY 和 WHERE 联合使用
SELECT product_type, COUNT(*) FROM product WHERE purchase_price > 500 GROUP BY product_type
注: where 在 from 之前 , 在 group by 之后
当 GROUP BY 和 WHERE 联合使用时,SELECT语句的执行顺序为:
FROM → WHERE → GROUP BY → SELECT
2.2.3 特别注意
1 . 当使用GROUP BY分组时 , NULL也是一个组
2 . 不要在SELECT子句中写多余的列(非分组,非聚合)
3 . 不要在WHERE子句中使用聚合函数
2.3 为聚合结果指定条件
2.3.1 HAVING子句
注: where只能对记录指定条件 , 而having可以对组指定条件
SELECT sale_price,COUNT(*) FROM product GROUP BY sale_price HAVING COUNT(*) >= 2
当有些条件既可以where子句中,又可以写在having子句中时,应该写在where字句中,因为速度更快,返回时间更短
2.4 对查询结果进行排序
2.4.1 ORDER BY子句
默认的查询结果是随机排序
ORDER BY 关键字指定升序与降序
升序排列 :
ORDER BY <字段>
ORDER BY <字段> AES
降序排列 :
ORDER BY <字段> DESC
2.4.2 指定多个排序键
多个排序键的字段之间用逗号隔开
注: 优先使用左侧的键 , 如果该列存在相同的值 , 再参考右侧的键
2.4.3 NULL的顺序
含有NULL的列作为排序键时 , NULL会在结果的开头或者末尾汇总显示
2.4.4 在排序键中使用显示用的别名
在ORDER BY子句中可以使用别名进行排序
2.4.5 ORDER BY 子句中可以使用的列
<1> ORDER BY字句中可以使用存在于表中但不在SELECT子句中的字段
SELECT sale_price ,product_name FROM product ORDER BY product_id DESC
<2> ORDER BY字句中可以使用聚合函数
SELECT product_type, COUNT(*) FROM product GROUP BY product_type ORDER BY COUNT(*) DESC
<3>ORDER BY字句中使用列编号(不推荐使用,即将弃用)
例一与例二效果一样
例一:
SELECT product_type,product_name,product_id FROM product ORDER BY product_type DESC,product_id
例二:
SELECT product_type,product_name,product_id FROM product ORDER BY 1 DESC,3