商鋪號 簽到時間 簽退時間
C4-4026a
C4-4026b 08:28 17:35
c4-5001a
C4-5001B 08:17 17:07
c4-5005a 17:05
C4-5005b
c4-5007a
c4-5007b 07:49 17:19
c4-5011a 08:17 17:02
c4-5011b
C4-5013a
c4-5013b 08:22 17:08
資料是這樣的,C4-4026a與C4-4026B表示一個商鋪的2個店員,要求一個商鋪至少一半以上的人打卡(如1個人就必須一個人打開,3個人必須2個人打卡),打卡可以一人打下班一人上班,但是必須保證加在一起是一半以上的人打卡,否則屬于未打卡
求大神應該如何寫SQL
uj5u.com熱心網友回復:
假設表結構為create table kaoqin(kid int auto_increment primary key,
sp varchar(20) not null, --------商鋪號
qdtime datetime, ---------簽到時間
qttime datetime); ------------簽退時間
有以下資料:

執行以下sql陳述句
select t.shangpu,if(sum(dk)/count(0)>=0.5,'一半以上的人打卡','未打卡')
from
(select left(sp,7) as shangpu,ifnull((qdtime or qttime),0) as dk from kaoqin) as t
group by t.shangpu;
得到結果:
uj5u.com熱心網友回復:
大致上和crynono 的差不多不過你這如果一個人打了簽到卡有打了簽退卡是算兩次打卡,還是一次,
資料:

如果是按兩次打卡:
SELECT a.spName,(CASE WHEN (SUM(a.qd) + SUM(a.qt))/(COUNT(1)*2) > 0.5 THEN '一半以上打卡' ELSE '未打卡' END) from
(SELECT LEFT(sp,7) as spName,(CASE WHEN qdtime is NULL THEN 0 ELSE 1 END) as qd, (CASE WHEN qttime is NULL THEN 0 ELSE 1 END) as qt
from test1) a
GROUP BY a.spName;

如果按1次打卡:
SELECT a.spName,(CASE WHEN SUM(a.qd)/COUNT(1) > 0.5 THEN '一半以上打卡' ELSE '未打卡' END) from
(SELECT LEFT(sp,7) as spName,(CASE WHEN qdtime is not NULL OR qttime is NOT NULL THEN 1 ELSE 0 END) as qd
from test1) a
GROUP BY a.spName;

不過我這統計是按打卡次數算的,不知道有沒有幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/86700.html
標籤:MySQL
上一篇:一個不解的問題,請解答
