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
同时使用 pcode
和 city
,并使用数据透视表 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 添加一样。
我有这个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
同时使用 pcode
和 city
,并使用数据透视表 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 添加一样。