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
您可以尝试使用聚合条件函数比较 Ontime
和 Delay
来自 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
您可以将 GROUP BY
与 SUM
一起使用:
SELECT PRSNO, IF(SUM(IF(STATUS = 'Ontime', 1, -1)) >= 0, 'Ontime', 'Delay') STATUS
FROM prsystem GROUP BY 1;
我有一个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
您可以尝试使用聚合条件函数比较 Ontime
和 Delay
来自 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 |
您可以将 GROUP BY
与 SUM
一起使用:
SELECT PRSNO, IF(SUM(IF(STATUS = 'Ontime', 1, -1)) >= 0, 'Ontime', 'Delay') STATUS
FROM prsystem GROUP BY 1;