Postgresql
將兩行分成兩列
我有下表:
id | name | action | count ------------------------------ 1 | Value1 | 0 | 27 1 | Value1 | 1 | 49 2 | Value2 | 0 | 7 2 | Value2 | 1 | 129 3 | Value3 | 0 | 9 3 | Value3 | 1 | 7
我需要讓“動作”列出現兩次,其中包含每行的計數值,如下所示:
id | name | action1 | action2 --------------------------------- 1 | Value1 | 27 | 49 2 | Value2 | 7 | 129 3 | Value3 | 9 | 7
我怎樣才能做到這一點?這是我的腳本:
SELECT m.id, t.name, m.action, count(m.id) AS count FROM table1 m LEFT JOIN table2 t ON (m.id = t.id) WHERE m.status != '2' GROUP BY m.id, t.name, m.action ORDER BY 1, 3
您可以使用條件聚合:
select m.id, t.name, count(case when m.action = 0 then m.id end) as action1, count(case when m.action = 1 then m.id end) as action2 from table1 m left table2 t ON (m.id = t.id) where m.status <> '2' group by m.id, t.name;
在即將發布的 9.4 版本中,
count(case(...))
可以使用新的“過濾”聚合寫得更短一些:count(id) filter (when m.action = 0)