MySQL 07 排序、分组

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lihaogn/article/details/82215506

1 排序

使用 order by 子句

mysql> select * from tb1;
+----+--------------+----------+------------+
| id | title        | author   | date       |
+----+--------------+----------+------------+
|  1 | 学习mysql    | lihaogn  | 2018-07-13 |
|  2 | 学习java     | zhangsan | 2018-06-30 |
|  3 | 学习scala    | wanger   | NULL       |
|  4 | 学习python   | caliu    | 2018-08-29 |
|  5 | 学习spark    | wusan    | 2018-08-29 |
|  6 | 学习hadoop   | gaowu    | 2018-08-29 |
+----+--------------+----------+------------+
6 rows in set (0.00 sec)

// 按日期升序排列
mysql> select * from tb1 order by date ASC;
+----+--------------+----------+------------+
| id | title        | author   | date       |
+----+--------------+----------+------------+
|  3 | 学习scala    | wanger   | NULL       |
|  2 | 学习java     | zhangsan | 2018-06-30 |
|  1 | 学习mysql    | lihaogn  | 2018-07-13 |
|  4 | 学习python   | caliu    | 2018-08-29 |
|  5 | 学习spark    | wusan    | 2018-08-29 |
|  6 | 学习hadoop   | gaowu    | 2018-08-29 |
+----+--------------+----------+------------+
6 rows in set (0.00 sec)

// 按日期降序排列
mysql> select * from tb1 order by date DESC;
+----+--------------+----------+------------+
| id | title        | author   | date       |
+----+--------------+----------+------------+
|  4 | 学习python   | caliu    | 2018-08-29 |
|  5 | 学习spark    | wusan    | 2018-08-29 |
|  6 | 学习hadoop   | gaowu    | 2018-08-29 |
|  1 | 学习mysql    | lihaogn  | 2018-07-13 |
|  2 | 学习java     | zhangsan | 2018-06-30 |
|  3 | 学习scala    | wanger   | NULL       |
+----+--------------+----------+------------+
6 rows in set (0.00 sec)

2 分组

使用 group by 子句

// 按title进行分组,并统计每个title有多少记录
mysql> SELECT title, COUNT(*) FROM tb1 GROUP BY title;
+--------------+----------+
| title        | COUNT(*) |
+--------------+----------+
| 学习hadoop   |        1 |
| 学习java     |        1 |
| 学习mysql    |        1 |
| 学习python   |        1 |
| 学习scala    |        1 |
| 学习spark    |        1 |
+--------------+----------+
6 rows in set (0.00 sec)
mysql> select * from employee_tbl;
+----+--------+---------------------+--------+
| id | name   | date                | singin |
+----+--------+---------------------+--------+
|  1 | 小明   | 2016-04-22 15:25:33 |      1 |
|  2 | 小王   | 2016-04-20 15:25:47 |      3 |
|  3 | 小丽   | 2016-04-19 15:26:02 |      2 |
|  4 | 小王   | 2016-04-07 15:26:14 |      4 |
|  5 | 小明   | 2016-04-11 15:26:40 |      4 |
|  6 | 小明   | 2016-04-04 15:26:54 |      2 |
+----+--------+---------------------+--------+
6 rows in set (0.00 sec)

mysql> SELECT name,SUM(singin) AS login_count FROM employee_tbl GROUP BY name;
+--------+-------------+
| name   | login_count |
+--------+-------------+
| 小丽   |           2 |
| 小明   |           7 |
| 小王   |           7 |
+--------+-------------+
3 rows in set (0.00 sec)

// WITH ROLLUP:可以实现在分组统计基础上再进行相同的统计。
mysql> SELECT name,SUM(singin) AS login_count FROM employee_tbl GROUP BY name WITH ROLLUP;
+--------+-------------+
| name   | login_count |
+--------+-------------+
| 小丽   |           2 |
| 小明   |           7 |
| 小王   |           7 |
| NULL   |          16 |
+--------+-------------+
4 rows in set (0.01 sec)

// 用coalesce来取代NULL的名称
// select coalesce(a,b,c);
// if a==null then b; if b==null then c; if a=b=c==null then null
mysql> SELECT coalesce(name,'总数'),SUM(singin) as login_count FROM employee_tbl GROUP BY name WITH ROLLUP;
+-------------------------+-------------+
| coalesce(name,'总数')   | login_count |
+-------------------------+-------------+
| 小丽                    |           2 |
| 小明                    |           7 |
| 小王                    |           7 |
| 总数                    |          16 |
+-------------------------+-------------+
4 rows in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/lihaogn/article/details/82215506