1.-- 排序
-- order by 字段 默认就是升序排序(小的在前 大的在后)
-- asc从小到大排列,即升序
-- 查询年龄在18到34岁之间的男性,按照年龄从小到大排序
select * from students where age between 18 and 34 and gender = 1 order by age;
select * from students where age between 18 and 34 and gender = 1 order by age asc;
-- 降序 desc
-- desc从大到小排序,即降序
-- 查询年龄在18到34岁之间的女性,身高从高到矮排序 --> 降序
select * from students where age between 18 and 34 and gender = 2 order by height desc; -- order by 多个字段
-- 查询年龄在18到34岁之间的女性,身高从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序
select * from students where age between 18 and 34 and gender = 2 order by height desc,age asc;
-- 查询年龄在18到34岁之间的女性,身高从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序, 如果年龄也相同那么按照id从大到小排序
select * from students where age between 18 and 34 and gender = 2 order by height desc,age asc, id desc;
-- 按照年龄从小到大、身高从高到矮的排序
select * from students order by age asc, height desc;2.-- 聚合函数 为了统计而生
-- 总数
-- count()
-- 统计班级有多少人
-- 以行为单位 有一行算一行
-- count(*)的效率是最高
select * from students;
select count(*) from students;
select count(id) from students;
-- 查询男性有多少人,女性有多少人 目前办不到
select count(*) from students where gender = 1;
select count(*) from students where gender = 2; -- 最大值
-- max()
-- 查询最大的年龄
select max(age) from students; -- 查询女性的最高 身高
select max(height) from students where gender = 2; -- 查询最高身高对应的名字
-- 目前也办不到 需要学习子查询
# 错误的: select name, max(height) from students; -- 小月月 180
-- 最小值
-- min()
select min(age) from students;
-- 求和
-- sum()
-- 计算所有人的年龄总和
select sum(height) from students;
# 错误select sum(height) / count(*) from students;
select sum(height) / count(height) from students; -- 平均值
-- avg()
-- 计算平均年龄
select avg(age) from students; -- 计算平均身高
select avg(height) from students; -- 四舍五入
-- 计算所有人的平均年龄,保留2位小数
-- sql中内置的函数可以四舍五入 round()
-- 可以通过 ? 获取帮助 比如查看函数: ? functions
select round(avg(age),2) from students; -- 计算男性的平均身高 保留2位小数
3.-- 分组
-- group by 字段
-- 查看班级上有哪些存在性别
select distinct gender from students;
select gender from students group by gender; ---- 查询所有的性别
select gender from students;
-- 按照性别分组
select gender from students group by gender; -- 计算每种性别中的人数
select gender, count(*) from students group by gender;
-- 计算每种性别中的最大年龄
select gender, max(age) from students group by gender; -- 先根据性别把数据分为二组
select gender, name from students group by gender;
-- group_concat(...)
# 错误的 select gender,name from students group by gender;
-- concat: 拼接
-- 查看每个性别下有哪些人
select gender, group_concat(name) from students group by gender; -- 查看每个性别下有哪些人和对应的年龄
select gender, group_concat(name,"-",age) from students group by gender; -- 查询同种性别中的姓名和身高
select gender,group_concat(name,"-",height) from students group by gender; -- 计算男性的人数
select count(*) from students where gender = 1;
select gender,count(*) from students group by gender; select gender,count(*) from students group by gender having gender = 1;
-- 对于分组之后的数据做进一步的筛选操作
-- 使用having
-- 可以使用having 表示对于已经分组的数据做进一步的筛选
-- 除了男生以外的分组的人数
select gender,count(*) from students group by gender having gender != 1;
select gender,count(*) from students group by gender having not gender = 1; -- having 对于分组之后的数据 做进一步的筛选
-- 查询每种性别中的平均年龄avg(age)
select gender, avg(age) from students group by gender;
-- 查询每种性别中的平均年龄avg(age), 最大年龄,平均身高,最高身高
select gender, avg(age) ,max(age), avg(height),max(height) from students group by gender; -- 查询平均年龄超过30岁的性别,以及姓名
-- 1. 先根据性别分组 2. 对应的性别的平均年龄是否大于30岁 需要查询的是性别和对应的姓名
select gender,group_concat(name) from students group by gender having avg(age) > 30; -- having 和 where 的区别
where 对于源数据的筛选操作
having 表示对于已经分组的数据做进一步的筛选, 如果有having 就一定有group by , 有group by 不一定就有having
mysql年龄字段设置范围 mysql年龄降序排列
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章