從一組學生姓名中,我想確定哪個學生每個 ID 執行了哪個步驟。
這是我得到的輸出:
id step1 step2 step3
1 Sam
1 John
2 Ana
2 Charlie
2 Bob
3 Alex
我通過代碼獲得:
select id,
case when step = 'A' then student_name end as "step1",
case when step = 'B' then student_name end as "step2",
case when step = 'C' then student_name end as "step3"
from my_table
group by id
這是我想得到的輸出:
id step1 step2 step3
1 Sam John
2 Ana Charlie Bob
3 Alex
如果名字是數字,我會這樣做:
select id,
sum(case when step = 'A' then student_name end) as "step1",
sum(case when step = 'B' then student_name end) as "step2",
sum(case when step = 'C' then student_name end) as "step3"
from my_table
group by id
但是,這不能用文本來執行。如何修改查詢以實作上述輸出?
uj5u.com熱心網友回復:
你的資料
CREATE TABLE mytable(
id INTEGER
,step1 VARCHAR(30)
,step2 VARCHAR(30)
,step3 VARCHAR(30)
);
INSERT INTO mytable
(id,step1,step2,step3) VALUES
(1,'Sam',NULL,NULL),
(1,NULL,'John',NULL),
(2,'Ana',NULL,NULL),
(2,NULL,'Charlie',NULL),
(2,NULL,NULL,'Bob'),
(3,NULL,'Alex',NULL);
只使用max功能
SELECT id,
Max(step1) step1,
Max(step2) step2,
Max(step3) step3
FROM mytable
GROUP BY id
ORDER BY id ASC
小提琴手
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/481683.html
標籤:sql PostgreSQL 通过...分组 和 聚合函数
