mysql:group by,order by
order by
order by
是用于支持字段的关键字
表结构如下
select * from table_a;
+----------+-------+
| name | score |
+----------+-------+
| zhangsan | 10 |
| lisi | 70 |
| wangwu | 70 |
| zhangsan | 50 |
+----------+-------+
默认生序
select * from table_a order by score;
+----------+-------+
| name | score |
+----------+-------+
| zhangsan | 10 |
| zhangsan | 50 |
| lisi | 70 |
| wangwu | 70 |
+----------+-------+
order by
默认以升序进行排列
降序排列
select * from table_a order by score desc;
+----------+-------+
| name | score |
+----------+-------+
| lisi | 70 |
| wangwu | 70 |
| zhangsan | 50 |
| zhangsan | 10 |
+----------+-------+
多重排序
select * from table_a order by score desc,name desc;
+----------+-------+
| name | score |
+----------+-------+
| wangwu | 70 |
| lisi | 70 |
| zhangsan | 50 |
| zhangsan | 10 |
+----------+-------+
mysql
对于多重排序的处理是从左到右,也就是说先根据条件1进行排序、出现了相同的情况再去执行条件2进行排序
group by
group by
主要是对结果集进行分组,在这个基础上进行聚合运算
表结构如下
select * from table_a;
+----------+-------+
| name | score |
+----------+-------+
| zhangsan | 10 |
| lisi | 70 |
| wangwu | 70 |
| zhangsan | 50 |
| wangwu | 20 |
+----------+-------+
分组
select name from table_a group by name;
+----------+
| name |
+----------+
| zhangsan |
| lisi |
| wangwu |
+----------+
在进行group
进行分组时,只能显示用于分组的字段
聚合运算
count
select name,count(*) from table_a group by name;
+----------+----------+
| name | count(*) |
+----------+----------+
| zhangsan | 2 |
| lisi | 1 |
| wangwu | 2 |
+----------+----------+
计算出每个分组的个数
sum
select name,sum(score) from table_a group by name;
+----------+------------+
| name | sum(score) |
+----------+------------+
| zhangsan | 60 |
| lisi | 70 |
| wangwu | 90 |
+----------+------------+
对每个分组中数据的sum
字段进行求和
avg
select name,avg(score) from table_a group by name;
+----------+------------+
| name | avg(score) |
+----------+------------+
| zhangsan | 30.0000 |
| lisi | 70.0000 |
| wangwu | 45.0000 |
+----------+------------+
对每个分组中数据的avg
字段进行求平均数