9.使用MySQL分组排序数据

目录

1.分组数据

13.1数据分组

13.2创建分组

13.3过滤分组

13.4分组和排序

13.5 SELECT子句顺序

1.分组数据

13.1数据分组

  • 分组允许把数据分为多个逻辑组,以便对每个组进行聚集运算。

  • 比如:前面学了聚集函数,是统计所有数据的信息,以花为例,想要统计每个种类花的总价格怎么办?    使用分组加聚合函数

13.2创建分组

## GROUP BY子句
    统计每种花的总价格
    SELECT name,SUM(price) FROM flower GROUP BY `name`;
输出:    
    +--------+------------+
    | name   | SUM(price) |
    +--------+------------+
    | 康乃馨 |          7  |
    | 白晶菊 |          3  |
    | 百日草 |          5  |
    | 矮牵牛 |        2.5  |
    +--------+------------+
分析: 根据花的名称分组,按原先统计所有花的总价格,而上述是对每个不同的花进行分组,统计同一种类花的总价格,如:康乃馨有两朵,总价格为7元.    
## GROUP BY子句的规定
    1.GROUP BY子句可以包含任意数目的列
    2.GROUP BY子句中列出的每个列都必须是检索列或有效的表达式,但不能是聚集函数。
    3.如果分组列中有NULL值,则NULL将作为一个分组返回。
    4.WHERE——GROUP BY——ORDER BY(从前到后的顺序)

13.3过滤分组

## 为什么不能使用WHERE呢
    WHERE只过滤指定行而不是分组,事实上,WHERE没有分组的概念
## 在分组的条件上可以使用HAVING来过滤分组数据    
## MySQL不仅可以分组数据,还可以过滤分组,比如只想要列出每个种类的总价格是在三元以上的
    过滤每种花总价格在三元以上的信息
    SELECT name,SUM(price) FROM flower GROUP BY name 
    HAVING SUM(price)>3;
## WHERE 和 HAVING 的差别
    WHERE在分组前进行过滤,HAVING在数据分组后进行过滤
## WHERE和HAVING一起使用的情况
    过滤每个花的单价是大于2的,并且含有此条件的花种类是两个以上的
    SELECT name,price FROM flower
    WHERE price>2
    GROUP BY propertyId
    HAVING count(*) >2;
分析: 先过滤每个种类的花的单价是大于2的,再过滤符合条件的花有两个以上的  

13.4分组和排序

## 一般在使用GROUP BY 子句时,因该也给出ORDER BY 子句,这是保证数据正确排序的唯一方法
    过滤每个花的单价是大于2的,并且含有此条件的花种类是两个以上的并且按照价格从高到底排序
    SELECT name,price FROM flower
    WHERE price>2
    GROUP BY propertyId
    HAVING count(*) >2
    ORDER BY price desc;
输出结果:
    +--------+-------+
    | name   | price |
    +--------+-------+
    | 白蔷薇 |     4  |
    | 菊花   |   3.6 |
    +--------+-------+

13.5 SELECT子句顺序

## SELECT 子句及其顺序(顺序从上到下)
    子句               说明                 是否必须使用
    SELECT          要返回的列或表达式        是
    FROM            从中检索数据的表          仅在从表中选择数据时使用
    WHERE           行级过滤                 否
    GROUP BY        分组说明                 仅在按组计算聚集时使用
    HAVING          组级过滤                 否  
    ORDER BY        输出排序顺序              否
    LIMIT           要检索的行数              否

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值