2017-06-19 27 views
1

選擇到餐桌的全重塑我有這個表方案:與MySQL

pcode city  
1  MAD  
3  MAD  
3  LON  
1  MAD  
2  LON  
3  MAD  
1  LON  
2  LON  

,我想這樣的結果:

pcode cityMAD cityLON 
1  2   1 
2  0   2 
3  2   1 

我的意思是,我需要一個SELECT爲「重塑」表計算每個pcode和城市的觀測數量。

桌子很大(> 100,000個obs)。不同的pcode的數量是未知的,但不同城市的數量很少,所以我可以在SELECT中包含城市的名稱。

+0

我認爲這實際上是糟糕的設計。我認爲更好的桌子應該是'(pcode,city,count)'的桌子...... –

+1

當然會,但實際桌子比這個更復雜,這就是我必須處理的。 – Javi

回答

1

您可以運行下面的查詢:

SELECT pcode, 
     SUM(city='MAD') as cityMAD, 
     SUM(city='LON') as cityLON 
FROM table 
GROUP BY pcode 

但你需要手動創建所有所需的列。

也許你應該group bypcodecity,並使用數據透視表。

請注意,SUM在True時接收1,在False時爲0。

2

你可以像下面建立查詢:

select pcode, 
sum(case when city = 'MAD' then 1 ELSE 0 END) as cityMAD, 
sum(case when city = 'LON' then 1 ELSE 0 END) as cityLON 
from table_name 
group by pcode; 

您需要添加sum每個城市就像我對cityMAD和cityLON ADDE。

+1

謝謝。完美的答案。由於他/她使用較少的代碼,我接受Dimgold的那個。 – Javi