排序语法:
select
*
from
表名
order
by
列
1
asc
|
desc
[,列
2
asc
|
desc
,...]
说明
- 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
- 默认按照列值从小到大排列(asc)
- asc从小到大排列,即升序,默认排序
- desc从大到小排序,即降序
例1:查询未删除男生信息,按学号降序
select
*
from
students
where
gender=
1
and
is_delete=
0
order
by
id
desc
;
例2:查询未删除学生信息,按名称升序
select
*
from
students
where
is_delete=
0
order
by
name
;
聚合函数
为了快速得到统计数据,经常会用到如下5个聚合函数
- count(*)表示计算总行数,括号中写星与列名,结果是相同的
- 聚合函数不能在 where 中使用
例1:查询学生总数
select
count
(*)
from
students;
最大值
- max(列)表示求此列的最大值
例2:查询女生的最大年龄
select
max
(
age
)
from
students
where
gender=
2
;
最小值
- min(列)表示求此列的最小值
例3:查询未删除的学生最小编号
select
min
(
id
)
from
students
where
is_delete=
0
;
求和
- sum(列)表示求此列的和
例4:查询男生的总年龄
select
sum
(age)
from
students
where
gender=
1
;
-- 平均年龄
select
sum
(age)/
count
(*)
from
students
where
gender=
1
;
平均值
- avg(列)表示求此列的平均值
例5:查询未删除女生的年龄的平均值
select
avg
(
age
)
from
students
where
is_delete=
0
and
gender=
2
;
分组
group by
- group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组
- group by可用于单个字段分组,也可用于多个字段分组
例如:
select gender from students group by gender;
select gender from students group by gender;
group by + group_concat()
- group_concat(字段名)可以作为一个输出字段来使用,
- 表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合
查询每种gender,都有哪些name
group by + group_concat()
查询每种gender所有人的avg(age),以及每种gender的,个数count(*), 同理还有sum() max() min()
group by + having
- having 条件表达式:用来分组查询后指定一些条件来输出查询结果
- having作用和where一样,但having只能用于group by
select gender,count(*) from students group by gender having count(*)>2;
group by + with rollup
- with rollup的作用是:在最后新增一行,来记录当前列里所有记录的总和, 或者罗列各个数字(去重)
select gender,count(*) from students group by gender with rollup;