背景
請原諒這個問題的標題,因為我真的不知道該如何描述我想要做的事情。
我有一個SQL表,d,它看起來像這樣:
-- - ------------ ------------
|id|sex|event_type_1|event_type_2|
-- --- ------------ ------------
|a |m |1 |1 |
|b |f |0 |1 |
|c |f |1 |0 |
|d |m |0 |1 |
-- --- ------------ ------------
問題
我試圖寫一個查詢,產生以下event_type_1和event_type_2的計數摘要,按sex切割(分組?
------------- ----- ----- >
| | m | f |
------------- ----- -----
|event_type_1 | 1 | 1 |
------------- ----- -----
|event_type_2 | 2 | 1 |
------------- ----- -----
問題是,這似乎涉及到將2個event_type列移位到查詢結果的行中,作為一個SQL新手,我并不熟悉。
我所做的嘗試
到目前為止,我想出了以下的查詢方式:
我已經試過了。
但這只給了我這樣的結果: uj5u.com熱心網友回復: 你可以使用 這里是一個db<>fiddle。
標籤: 上一篇:在CSS中,文本不會在影像下對齊
SELECT event_type_1, event_type_2, count(sex
FROM d
group by event_type_1, event_type_2
------------ -----
|event_type_1|event_type_2|count|
------------ ------------ -----
|1 |1 |1 |
|1 |0 |1 |
|0 |1 |2 |
------------ ------------ -----
橫向連接來解除資料的透視。 然后使用條件聚合來計算m和f:select v.which,
count(*) filter (whered. sex = 'm'/span>) as m,
count(*) filter (whered. sex = 'f'/span>) as f
from d cross join lateral
(values (d.event_type_1, 'event_type_1') 。
(d.event_type_2, 'event_type_2')
) v(val, which)
where v.val =1
group by v.which。
