选择使用mysql对表进行广泛重构

时间:2017-06-19 13:34:41

标签: mysql sql select pivot

我有这个表格方案:

 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英尺)。不同pcode的数量未知,但不同城市的数量很少,因此我可以在SELECT中包含城市的名称。

2 个答案:

答案 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添加广告。

答案 1 :(得分:1)

您可以运行以下查询:

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

但是您需要手动创建所有需要的列。

也许您应该group by同时pcodecity,并使用数据透视表。

请注意SUM在True时收到1,在False时自动收到0。