最近有个需要,是通过要统计考勤的记录
同一个人,多次记录,只计算优先级为最高的, 这里是 考勤>请假>缺席
虽然感觉不是最优的方法,但是先记录一下
先通过 case 赋予字段不同值的优先级, 在通过 max()函数在提取出最大优先级的值,最后在通过优先级重新赋值
张飞 | 出勤 |
张飞 | 请假 |
张飞 | 缺席 |
SELECT
count(1) count,
CASE t2. STATUS
WHEN 2 THEN '出勤'
WHEN 1 THEN '请假'
ELSE '缺勤'
END AS STATUS
FROM
(
SELECT
Max(t1. STATUS) STATUS,
username
FROM
(
SELECT
kq.username,
kq.attendance_date,
CASE kq. STATUS
WHEN '出勤' THEN 2
WHEN '请假' THEN 1
ELSE 0
END AS STATUS
FROM kqljl kq
) t1
GROUP BY username , attendance_date
) t2
GROUP BY t2. STATUS