查询:分组与排序
1.排序:order by
select * from info order by age desc; -- desc:倒序
select * from info order by age asc; -- asc顺序
select * from info order by id desc;
select * from info order by id asc;
-- 优先按照age从小到大;如果age相同则按照id从大到小。
select * from info order by age asc,id desc;
select * from info where id>10 order by age asc,id desc;
select * from info where id>6 or name like "%y" order by age asc,id desc;
2.取部分:limit
select * from info limit 5; -- 获取前5条数据
select * from info order by id desc limit 3; -- 先排序,再获取前3条数据
select * from info where id > 4 order by id desc limit 3; -- 先排序,再获取前3条数据
select * from info limit 3 offset 2; -- 从位置2开始,向后获取前3数据
数据库表中:1000条数据。
- 第一页:
select * from info limit 10 offset 0;
- 第二页:
select * from info limit 10 offset 10;
- 第三页:
select * from info limit 10 offset 20;
- 第四页:
select * from info limit 10 offset 30;
- ...
3.分组:group by
- 通常用于按照某一列进行分组,把这一列相同的数据合并到一起
例如:获取info表中每个年龄各有多少人
select age ,count(id) from info group by age; --以age列进行分组,所有相同的合并到一起
- 进行分组时,想显示其他列的值,但是其他列值都不相同,就不知道保留那个值,这时可以使用聚合函数
示例1:
select age,max(id) from info group by age; --以age进行分组,id会显示合并后的最大值
表中age = 49 有两条数据,id分别为3和7,这里合并后就会显示7
示例2:其他的聚合函数
select age,count(id),max(id),min(id),sum(id),avg(id) from info group by age;
- 按照条件进行分组:having
# 查询相同年龄大于1的
select age,count(id) from info group by age having count(id) > 1;
查询出年龄为49岁的大于1
4.执行顺序
- 目前学习的sql执行顺序为:
where、group by 、having、order by、limit
select age,count(id) from info where id > 2 group by age having count(id) > 1 order by age desc limit 1;
- 要查询的表info
- 条件 id>2
- 根据age分组
- 对分组后的数据再根据聚合条件过滤 count(id)>1
- 根据age从大到小排序
- 获取第1条