2013-03-17 48 views
0

我有這樣一個表:SQL查詢來變換值的組合成一個塔

user_id, gender, sent 
1  M  100 
1  F  120 
2  M  20 
2  F  30 

欲像這樣的表從上面:

user_id, male_sent, female_sent, total_sent 
1  100  120   220 
2  20   30   50 

我缺乏(Postgres的) SQL foo來弄清楚這一點。

+0

嗨,我使用PSQL,我用psql標記它。 – jason 2013-03-17 23:15:08

+0

你有沒有看過'psql'的標籤描述?你可能在談論PostgreSQL。 – 2013-03-22 03:58:24

+0

哎呀,你是對的。 psql!= postgresql – jason 2013-03-23 19:17:02

回答

2

可以使用聚合函數與CASE表達式得到的結果:

select user_id, 
    sum(case when gender = 'M' then sent else 0 end) male_sent, 
    sum(case when gender = 'F' then sent else 0 end) female_sent, 
    sum(sent) total_sent 
from yourtable 
group by user_id 

見您正在使用什麼數據庫SQL Fiddle with Demo

+0

再次感謝,工作。 – jason 2013-03-17 23:29:21

+0

@jason歡迎您! – Taryn 2013-03-17 23:32:10

2

如果您正在使用SQL Server,你可以做這樣的事情:

SELECT user_id,sum(case when gender = 'M' then sent else 0 end) as male_sent, 
sum(case when gender = 'F' then sent else 0 end) as female_sent, 
sum(sent) as total_sent 
FROM your_table_name 
GROUP BY user_id