mysql group by 命令_MySQL常用命令(八)--GROUP BY、HAVING、SELECT子句的顺序

Group by

作用:分组

可以包含任意数目的列。

除了聚集计算语句外,SELECT 语句中的每个列都必须在GROUP BY子句中给出;

如果分组列中具有NULL,则将NULL做为一个分组返回,如果有多行NULL值,它们将分为一组;

GROUP BY必须出现在WHERE子句后,ORDER BY语句之前;

HAVAING

作用:进行分组过滤,支持所有WHERE操作;WHERE在数据分组前进行过滤,HAVAING在数据分组后进行过滤;

mysql> SELECT * FROM student;

+------------+------+-----------+-------+

| studentNum | name | classroom | score |

+------------+------+-----------+-------+

| 1001 | 李菲 | 1 | 78 |

| 1002 | 王名 | 1 | 88 |

| 1003 | 赵琳 | 1 | 98 |

| 1004 | 杜悦 | 2 | 87 |

| 1005 | 周黎 | 2 | 55 |

| 1006 | 齐飞 | 3 | 89 |

| 1007 | 孙敏 | 3 | 87 |

| 1008 | 周克 | 4 | 97 |

+------------+------+-----------+-------+

8 rows in set (0.00 sec)

mysql> SELECT classroom ,AVG(score) AS avg_score FROM student GROUP BY classroom;

+-----------+-----------+

| classroom | avg_score |

+-----------+-----------+

| 1 | 88.0000 |

| 2 | 71.0000 |

| 3 | 88.0000 |

| 4 | 97.0000 |

+-----------+-----------+

4 rows in set (0.00 sec)

mysql> SELECT classroom ,AVG(score) AS avg_score FROM student GROUP BY classroom HAVING avg_score>80;

+-----------+-----------+

| classroom | avg_score |

+-----------+-----------+

| 1 | 88.0000 |

| 3 | 88.0000 |

| 4 | 97.0000 |

+-----------+-----------+

3 rows in set (0.00 sec)

mysql> SELECT classroom ,AVG(score) AS avg_score ,MAX(score) AS max_score,MIN(score) AS min_score FROM student GROUP BY classroom;

+-----------+-----------+-----------+-----------+

| classroom | avg_score | max_score | min_score |

+-----------+-----------+-----------+-----------+

| 1 | 88.0000 | 98 | 78 |

| 2 | 71.0000 | 87 | 55 |

| 3 | 88.0000 | 89 | 87 |

| 4 | 97.0000 | 97 | 97 |

+-----------+-----------+-----------+-----------+

4 rows in set (0.00 sec)

mysql> SELECT classroom ,AVG(score) AS avg_score ,MAX(score) AS max_score,MIN(score) AS min_score FROM student GROUP BY classroom HAVING classroom = 1;

+-----------+-----------+-----------+-----------+

| classroom | avg_score | max_score | min_score |

+-----------+-----------+-----------+-----------+

| 1 | 88.0000 | 98 | 78 |

+-----------+-----------+-----------+-----------+

1 row in set (0.00 sec)

SELECT 子句的执行顺序

子句

说明

是否必须执行

SELECT

要返回的列表或表达式

FROM

从中检索数据的表

仅在从表选择数据时使用

WHERE

行级过滤

GROUP BY

分组说明

仅在按组计算聚集时使用

HAVING

组级过滤

ORDER BY

输出排序顺序

LIMIT

要检索的行数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值