【MySQL_学习笔记】2021.8.16
- GROUP BY子句
SELECT funs_id, SUM(money) AS 打赏金额 FROM income GROUP BY funs_id ORDER BY 打赏金额 DESC
备注:
(1)GROUP BY 子句表示按照指定字段(或计算字段、函数等)对记录进行分组
(2)可以使用聚集函数,对每一组数据分别进行统计
(3)SQL语句的整体书写顺序为:SELECT -> FROM -> WHERE -> GROUP BY -> ORDER BY
SELECT MONTH(pay_time) AS 月份, COUNT(*) AS 本月打赏次数, SUM(money) AS 本月打赏金额 FROM income GROUP BY MONTH(pay_time)
备注:
(1)GROUP BY 的分组依据可以是计算字段
(2)注意并不是所有函数都可以在 GROUP BY 子句中使用,不能使用count、sum等聚集函数作为分组依据,聚集函数必须在 GROUP BY 分组之后才能使用
(3)SQL 语句的执行顺序为:FROM -> WHERE -> GROUP BY -> SELECT
SELECT funs_id AS 用户名, gift_level AS 礼物, SUM(money) AS 本月打赏金额 FROM income GROUP BY funs_id, gift_level ORDER BY funs_id, gift_level
备注:
(1)多层(嵌套)分组可以对第一层分组后的每一组数据再进行分组,例如按照“人名+礼物”分组,表示同一个人并且同一种礼物的记录,分为一组进行统计
(2)嵌套分组只需在 GROUP BY 子句中按照分组的先后顺序用逗号隔开即可
(3)如果分组时发现有 NULL 值,则 NULL 值的记录单列一组
- HAVING 子句
SELECT DATE(pay_time) AS 日期, SUM(money) AS 打赏总额 FROM income GROUP BY DATE(pay_time)
SELECT DATE(pay_time) AS 日期, SUM(money) AS 打赏总额, '玫瑰' AS 礼物名称 FROM income WHERE gift_level = '玫瑰' GROUP BY DATE(pay_time)
SELECT 3+5
备注:
(1)SELECT 子句中可以使用各种“能够输出数值”的元素、比如字符串、算式、函数等
(2)在实际工作中,SQL可以作为计算器使用
SELECT DATE(pay_time) AS 日期, SUM(money) AS 打赏总额 FROM income GROUP BY DATE(pay_time) HAVING SUM(money)>10000
备注:
(1)WHERE子句必须写在GROUP BY子句之前
(2)WHERE子句中不允许使用聚集统计函数
(3)分组后使用HAVING筛选分组,而不是WHERE
SELECT DATE(pay_time) AS 日期, SUM(money) AS 打赏总额, '玫瑰' AS 礼物类型 FROM income WHERE gift_level = '玫瑰' GROUP BY DATE(pay_time) HAVING SUM(money)>500 ORDER BY 打赏总额 DESC
备注:
(1)HAVING 子句对分组后的数据进行过滤,分组后选出符合条件的组
(2)HAVING 的用法和 WHERE 用法类似,区别在于 HAVING 子句必须写在 GROUP BY 分组之后,执行顺序也在分组之后,HAVING 可以使用聚合函数

浙公网安备 33010602011771号