Select 使用 mysql 对 table 进行广泛重塑

Select to wide reshape of table with mysql

我有这个table方案:

 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 到 'reshape' table,计算每个 pcode 和城市的观察次数。

table 相当大(>100,000 obs)。不同密码的数量未知,但不同城市的数量很少,所以我可以在 SELECT.

中包含城市名称

您可以运行以下查询:

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

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

也许你应该 group by 同时使用 pcodecity,并使用数据透视表 table.

注意 SUM True 时自动接收 1,False 时自动接收 0。

您可以像下面这样构建查询:

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 添加一样。