group by

简介: <pre style="font-family:Monaco,Consolas,Courier,'Lucida Console',monospace; background-color:rgb(255,255,255); font-size:14px; line-height:21px"><div style="background-color:inherit"><div style="
 

SELECT expr,...

    FROM table

    [WHERE where_definition]

    [GROUP BY~[ASC|DESC],...]

    [HAVING where_definition]

    [ORDER BY~[ASC|DESC],...]

    [LIMIT~]


每个分组只返回一行数据;欲返回所有数据用order by。
where指定范围;
having限定条件;
order by指定排序方式。

+----+--------+-----+-----+-------+------+-------+------------+
| id | name   | age | sex | grade | math | level | date       |
+----+--------+-----+-----+-------+------+-------+------------+
|  1 | 红红   |  12 | 女  |    66 |   87 |     3 | 2016-01-04 |
|  3 | 小王王 |  22 | 男  |    67 |   59 |     1 | 2016-01-13 |
|  4 | 小_    |  20 | 男  |    77 |   72 |     3 | 2016-01-07 |
|  5 | 张三   |  19 | 男  |    88 |   65 |     3 | 2016-01-21 |
|  6 | 溜溜   |  25 | 女  |    66 |   68 |     2 | 2016-01-08 |
|  7 | 可可   |  22 | 女  |    65 |   93 |     1 | 2016-01-28 |
|  8 | 糊糊   |  12 | 女  |    90 |   88 |     2 | 2016-01-19 |
|  9 | Mary   |  21 | 男  |    88 |   79 |     1 | 2016-01-06 |
+----+--------+-----+-----+-------+------+-------+------------+
1、每个等级level的math最高分:

SELECT `level`,MAX(math)FROM student GROUP BY `level`;

+-------+-----------+
| level | MAX(math) |
+-------+-----------+
|     1 |        93 |
|     2 |        88 |
|     3 |        87 |
+-------+-----------+
3 rows in set

# 每个等级的总数学成绩
mysql> SELECT `level`, sum (math) FROM student GROUP BY `level`;
+-------+-----------+
| level | sum(math) |
+-------+-----------+
|     1 |       231 |
|     2 |       156 |
|     3 |       224 |
+-------+-----------+
3 rows in set

2、按两个字段排序

SELECT `level`,sex,MAX(math)FROM student GROUP BY `level`,sex;

先level后sex。

+-------+-----+-----------+
| level | sex | MAX(math) |
+-------+-----+-----------+
|     1 | 女  |        93 |
|     1 | 男  |        79 |
|     2 | 女  |        88 |
|     3 | 女  |        87 |
|     3 | 男  |        72 |
+-------+-----+-----------+
5 rows in set
为何 女nv 在 男nan 的前面???order by亦如此。
3、having限定条件

SELECT `level`,MAX(math)FROM student GROUP BY `level` HAVING COUNT(*)>2;

和2对比。按level分组,且要求每个level中的人数大于2.

+-------+-----------+
| level | MAX(math) |
+-------+-----------+
|     1 |        93 |
|     3 |        87 |
+-------+-----------+
2 rows in set

4、having、order by

SELECT id,`level`,MAX(math),AVG(grade)FROM student GROUPBY `level` HAVINGAVG(grade)>76ORDERBY id;

grade平均成绩大于76,按id排序。
+----+-------+-----------+------------+
| id | level | MAX(math) | AVG(grade) |
+----+-------+-----------+------------+
|  1 |     3 |        87 |         77 |
|  6 |     2 |        88 |         78 |
+----+-------+-----------+------------+
2 rows in set


目录
相关文章
|
开发框架 .NET 编译器
C#-Group By 的使用
group by 是linq中的分组功能,能通过给定的字段对数据集进行分组,得到分组后的结果。
281 0
|
SQL 关系型数据库 MySQL
mysql使用ORDER BY和GROUP BY
mysql使用ORDER BY和GROUP BY
57 0
|
SQL 关系型数据库 MySQL
GROUP BY和ORDER BY的区别
GROUP BY和ORDER BY的区别
298 0
|
SQL 关系型数据库 MySQL
only_full_group_by问题而引发的对group by的深入思考
only_full_group_by问题而引发的对group by的深入思考
154 0
|
SQL
ORDER BY && GROUP BY
ORDER BY && GROUP BY
127 0
ORDER BY && GROUP BY
group by+group_concat解决的小问题
group by+group_concat解决的小问题
109 0
group by
group by
91 0
|
SQL
group实例
group实例
95 0
|
SQL 关系型数据库 数据挖掘
你真的懂使用Group by?
你真的懂使用Group by?
545 0
你真的懂使用Group by?
|
SQL
十、GROUP BY 和 HAVING 的使用
十、GROUP BY 和 HAVING 的使用
288 0