接着上次的代码
-- 分组查询:一般结合聚合函数使用,其作用是将某列中具有相同值的行组合在一起,并对这些组进行汇总或计算。
-- 根据性别分组统计男女员工分别的数量(先把性别分成两组:男或者女。接着对所有性别为男的行数进行统计,接着又对所有性别为女的行数进行统计)
select gender,count(*) from `table-select` group by gender ;
-- 根据性别分组,统计男性和女性的平均年龄
select gender,avg(age) from `table-select` group by gender ;
-- 查询年龄小于45的学生,并根据地址分组,获取学生数量大于等于3的地址(首先对地址分组求各个地区年龄小于45的学生个数(group by),在分完组的基础上再筛选出数量大于3的学生个数(having))
select count(*),home from `table-select` where age < 45 group by home having count(*) >= 2;
-- 排序查询
-- 先对所有人的年龄升序排序,如果年龄相同,再对成绩降序排序
select * from `table-select` order by age asc, grade desc;
-- 分页查询
-- 相当于把一张表分为多个小表。第一个参数表示当前索引指向原始表格的第几行(从0开始),第二个参数表示被分出来的表的行数
-- 查询第一页表格记录,只展示三条数据
select * from `table-select` limit 0,3;
-- 查询第二页表格记录,只展示三条数据
select * from `table-select` limit 3,3;
-- 编写顺序:select > from > where > group by > having > order by > limit
-- 执行顺序:from > where > group by > select > having > order by > limit
-- 首先在表中找到id在1到9之间的,对家庭所在地进行分组,获取各个地址的学生数量,接着又筛选出学生数量小于3的地址,然后对各个地址人数进行升序排序,最后只展示表中以0索引开始,共3行的内容
SELECT home, COUNT(*)
FROM `table-select`
WHERE id BETWEEN '1' AND '9'
GROUP BY home
HAVING count(*)<3
ORDER BY count(*) asc
LIMIT 0,3;