MySQL排序和分组使用的命令
排序 order by
一、 order by 单字段
——默认从小到大排序,字段后面隐藏了asc条件,当条件为desc时,按从大到小排序。
示例1:查询年龄在18到34岁之间的男性,按照年龄从小到大排序:
select * from student where (age between 18 and 34) and (gender="男") order by age;
示例2:查询年龄在18到34岁之间的女性,按照身高从高到矮排序:
select * from student where (age betwwen 18 and 34) and (gender="女") order by height desc;
二、 order by 多字段
——字段从左到右权重递减。
示例1:查询年龄在18到34岁之间的女性,按照身高从高到矮排序,如果身高相同则按照年龄从小到大排序:
select * from student where (age betwwen 18 and 34) and (gender="女") order by height desc,age asc;
示例2:按年龄从大到小排序,相同情况下按身高从小到大排序:
select * from student order by age desc,height asc;
分组 group by
一、 聚合函数
——count,总数
示例:查询女性有多少人。
select count(*) from student group where genrer="女";
——max,最大值。
示例:查询男性中最高的身高。
select max(height) from student where gender="男";
——min,最小值。
示例:查询女性中最矮的身高。
select min(height) from student where gender="女";
——sum,求和。
示例:查询男性的身高和。
select sum(height) from student where gender="男";
——avg,平均值。
示例:查询女性的平均年龄。
select avg(age) from student where gender="女";
——round,round(123.45, 1)可保留一位小数且四舍五入。
示例:示例:查询女性的平均年龄并保留两位小数。
select round(avg(age), 2) from student where gender="女";
二、 分组命令 group by
group by一般跟聚合函数配合使用,使得分组后显示的字段对于每个小组是唯一指定的。
示例1:计算每种性别的人数。
select gender,count(*) from student group by gender;
示例2:计算每种性别的平均身高(保留两位小数)。
select gender,round(avg(height), 2) from student group by gender;
——group_concat(字段1,字段2……),将分组中每组的所有对象的某字段显示出来,可以添加其他字符。
示例1:按性别分组将每个性别的人数,人员名称和平均年龄展示出来。
select gender,count(*),avg(age),group_concat(name) from .student group by gender;
——having,对分组或经where处理后的数据再进行筛选。
示例1:数据表CoreList有字段ClassID、StudentID、Core,请查询考试不及格人数超过6个的班级。
select ClassID from CoreList where Core < 60 group by ClassID having count(*) > 6;
where命令是对原始数据进行筛选,having是对分组数据进行筛选,且使用聚合函数的结果进行判断。
分组后除了可以使用having命令进行筛选,还可以进行order by排序和limit分页。
分页 limit
一、 限制查询出来的数据个数
——limit num(查询的数据个数)
示例:查询数据表的前5个数据。
select * from student limit 5;
二、 输入两个参数,进行范围获取数据
——limit start(数据开始的下标,0开始), count(查询的数据个数)
示例:查询第6条到第10跳数据。
select * from student limit 6,5;
如果有排序和分页要求,先排序后分页。