表:student
字段:
studentnum(学号),studentname(学生姓名),classname(班级名称),sex(男:1,女:2),birthday(出生日期)
我现在数据库存储了以下数据:
问题1:查出student表中各个班级的人数,并按人数从多到少排列
答案:
查询结果是:
注意点:GROUP BY分组,ORDER BY...DESC(对某某字段进行降序排列,也就是从多到少显示,ASC是升序)
问题2:查出student表中各班年龄最小的女生班级号,学号,姓名和出生日期,并按班级号升序排列
答案:
查询结果为:
注意点:以上标红已说明,大概思路就是:既然要查找年龄最小的,则需要用到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之后,得到的结果则会计算有误。
结果展示:
注意点,使用的是
以上是个人理解,如有理解错误的地方,欢迎指正哦~
我是通过翻书和做测试,得出来的答案。
其实数据库的知识如果太久没有接触,脑子就很容易短路的,希望今后能够慢慢复习,毕竟知识都是靠积累的哦。
这是我写的第一篇博客,之后会一直坚持写技术博客,当然,也会写一些人生感悟,希望能与每个走在未来的人一起交流心声。