SQL 区分大小写

SQL CASE AND DISTINCT

我有一个table这样的

这只是我的一个示例 table

ID PRSNO QTY DESC STATUS
1 TEST1 1 Pen Ontime
2 TEST1 1 Eraser Delay
3 TEST1 1 Scissor Ontime
ID PRSNO QTY DESC STATUS
4 TEST2 1 Pen Delay
5 TEST2 1 Notebook Delay
6 TEST2 1 Pentelpen Delay
ID PRSNO QTY DESC STATUS
7 TEST3 1 Pen Ontime
8 TEST3 1 Notebook Ontime
9 TEST3 1 Pentelpen Delay
9 TEST3 1 Pentelpen Delay
ID PRSNO QTY DESC STATUS
7 TEST4 1 Keyboard Delay
8 TEST4 1 Mouse Ontime
9 TEST4 1 Monitor Delay
9 TEST4 1 CPU Delay

但我的问题是我想这样显示

PRSNO STATUS
TEST1 Ontime
TEST2 Delay
TEST3 Ontime
TEST4 Delay

我只知道如何区分 PRSNO 但我不知道如何计算状态 如果准时 <= 延迟
准时 别的 延迟

我的代码仅适用于 distinct

SELECT DISTINCT PRSNO FROM prsystem

您可以尝试使用聚合条件函数比较 OntimeDelay 来自 STATUS 列的计数

查询 #1

SELECT PRSNO,
       CASE WHEN 
       COUNT(CASE WHEN STATUS = 'Ontime' THEN 1 END) >= 
            COUNT(CASE WHEN STATUS = 'Delay' THEN 1 END)  THEN 'Ontime' 
                ELSE 'Delay'  END STATUS
FROM prsystem
GROUP BY PRSNO;
PRSNO STATUS
TEST1 Ontime
TEST2 Delay
TEST3 Ontime
TEST4 Delay

View on DB Fiddle

您可以将 GROUP BYSUM 一起使用:

SELECT PRSNO, IF(SUM(IF(STATUS = 'Ontime', 1, -1)) >= 0, 'Ontime', 'Delay') STATUS
FROM prsystem GROUP BY 1;