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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36673106/article/details/80774496

表: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之后,得到的结果则会计算有误。

结果展示:


注意点,使用的是

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

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

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

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



展开阅读全文

没有更多推荐了,返回首页