前些阵子觉得工作不是太开心,加上工资待遇也一般,就想着出去碰碰运气,面面试。看一看自己目前的水平到底如何,处于一个什么级别。
下面是我在面试过程中被问到的一道简单的SQL面试题
题目是 : 要把大象扔冰箱拢共分几步?
当然这不是面试二人转演员,所以题目也肯定不是这个了。。。
咳咳,下面开始说正经的…
面试题是这样的 :
一个学生表(单表),里面有
ID
,name
,score
,sex
这4个字段,请用2列表示该班级本次考试所有的及格人数之和与不及格人数之和。
由于当时比较紧张( PS : 其实是我数据库学的太垃圾 ),我的脑子一片浆糊,于是乎我就没答上来(不要笑我),于是乎我也就没通过面试。
数据库结构如下:
ID | NAME | SEX | SCORE |
---|---|---|---|
1 | 小明 | 男 | 25 |
2 | 小红 | 男 | 99 |
3 | 生番 | 男 | 59 |
4 | 小强 | 男 | 58 |
5 | 二丫 | 男 | 48 |
6 | 生子 | 男 | 74 |
7 | 劲仔 | 男 | 97 |
8 | 小马 | 男 | 88 |
现将我目前能够想到的三种Sql写法记录一下:
1、利用SUM()
函数进行数字累加
SELECT SUM(CASE WHEN score >= 60 THEN 1 ELSE 0 END) AS pass , SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS fail FROM student
2、利用IF()
函数进行分数判断并累加
SELECT SUM(if(score >= 60,1,0)) AS pass , SUM(if(score < 60,1,0) AS fail FROM student
3、这是最笨的方法,使用两个子查询的方式进行COUNT()
统计
SELECT (SELECT COUNT() FROM student WHERE score >= 60) AS pass , (SELECT COUNT() FROM student WHERE score < 60) AS pass