【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 可以使用聚合函数

posted @ 2021-08-16 19:56  ZzzRed  阅读(41)  评论(0)    收藏  举报