如何使用MySQL中的case语句获取列差异计数的范围?

时间:2017-05-30 11:52:06

标签: mysql sql

我有一个名为users的表,其中我只有两列:

  • 假期津贴(users.holidayallowance
  • 剩余免税额(users.remaining

我想找出这两列的差异范围,例如:

+--------------+--------+
| Taken Days   | Ranges |
+--------------+--------+
| 0 - 10       |     13 |
| 11 - 20      |      3 |
| 21 - 30      |      7 |
+--------------+--------+

上表显示:有13人休息0 - 10天,3人休息11 - 20天,7人休息21-30天等。

我已经尝试了以下查询,我知道我错了,所以如果有人可以指导我,那就太好了。谢谢。

SELECT

count( 

CASE 
WHEN holidayallowance - remaining < 10 THEN '0-10'
WHEN holidayallowance - remaining >10 and holidayallowance - remaining < 20 THEN '10 - 20'
when holidayallowance - remaining >20 and holidayallowance - remaining <30 THEN  '20 - 30'
when holidayallowance - remaining >30 and holidayallowance - remaining <40 then  '30 - 40'
END
) AS 'Days Taken Off' FROM `users`

1 个答案:

答案 0 :(得分:3)

你很近:

SELECT (CASE WHEN holidayallowance - remaining < 10 THEN '0-10'
             WHEN holidayallowance - remaining < 20 THEN '10 - 20'
             WHEN holidayallowance - remaining < 30 THEN '20 - 30'
             WHEN holidayallowance - remaining < 40 THEN '30 - 40'
       END) AS Days_Taken_Off,
      COUNT(*)
FROM `users`
GROUP BY Days_Taken_Off;

注意:我也改变了逻辑。第一个匹配条件是用于结果的条件。所以,你可以将条件“链接”在一起作为不平等。 (实际上,这使得更改边界变得更加容易。)