SQL:查找某个班级的人数并按班级人数多少进行排列,查找各班年龄最小的女生的班级号,学号,姓名,出生日期并按班级号升序排列

表:student

字段:

studentnum(学号),studentname(学生姓名),classname(班级名称),sex(男:1,女:2),birthday(出生日期)

我现在数据库存储了以下数据:


问题1:查出student表中各个班级的人数,并按人数从多到少排列

答案:

SELECT classname,COUNT(classname) FROM student  GROUP BY classname  ORDER BY COUNT(classname)  DESC

查询结果是:

注意点GROUP BY分组,ORDER BY...DESC(对某某字段进行降序排列,也就是从多到少显示,ASC是升序)

问题2:查出student表中各班年龄最小的女生班级号,学号,姓名和出生日期,并按班级号升序排列

答案:

SELECT classname,studentnum,studentname,birthday FROM student WHERE  age in(SELECT  MIN(age) FROM student WHERE sex='2'  GROUP BY classname )  ORDER BY classname ASC

查询结果为:


注意点:以上标红已说明,大概思路就是:既然要查找年龄最小的,则需要用到min函数。

各班,则需要用到分组gruop by 班级。where age in 的意思是我要查找的年龄条件是什么,在年龄条件符合的条件下,性别必须是女生,所以要加in里面加个where 条件,最后则是按照题目的意思,按班级号升序,就用到了order by 班级号 ASC。

问题3:想统计出各班的男生和女生分别 多少人

答案:SELECT classname AS '班级',SUM(CASE WHEN sex='1' THEN sex ELSE 0 END ) AS '男生',
SUM(CASE WHEN sex='2' THEN sex ELSE 0 END ) AS '女生'
FROM student

GROUP BY classname;

注:如果case函数中,把then后面的sex改成数字1同样也能得到正确答案,但是如果改为2之后,得到的结果则会计算有误。

结果展示:


注意点,使用的是

以上是个人理解,如有理解错误的地方,欢迎指正哦~

我是通过翻书和做测试,得出来的答案。

其实数据库的知识如果太久没有接触,脑子就很容易短路的,希望今后能够慢慢复习,毕竟知识都是靠积累的哦。

这是我写的第一篇博客,之后会一直坚持写技术博客,当然,也会写一些人生感悟,希望能与每个走在未来的人一起交流心声。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值