2017-06-19 33 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