通过优先级,决定group by 字段 的值

本文介绍了一种通过SQL查询优化考勤记录统计的方法。利用CASE语句设置不同状态的优先级,并通过MAX函数筛选最高优先级的记录进行统计,实现对个人考勤状态的有效管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有个需要,是通过要统计考勤的记录

同一个人,多次记录,只计算优先级为最高的, 这里是 考勤>请假>缺席

虽然感觉不是最优的方法,但是先记录一下

先通过 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值