问题描述
我有一个数据集,每个记录都包括街道,邮政编码,城市,人口。我想查找(一个邮政编码的人口百分比代表整个城市的人口),但无法弄清楚如何按邮政编码分组,然后添加一列来显示同一城市中每个邮政编码的城市总人口。
[正在尝试查找(城市总数和城市百分比)]
我尝试的代码:
SELECT
city,zipcode,sum(population) as Pop_Count_ (
SELECT
SUM(zSUM)
FROM
(
SELECT
SUM(distinct zipcode) AS zCount
FROM
myTable
GROUP BY
city
)
AS A)_
FROM
myTable_
GROUP BY
city,zipcode;
解决方法
使用窗口功能:
select city,zipcode,sum(population) as population,sum(population) / sum(sum(population)) over (partition by city) as zipcode_ratio
from t
group by city,zipcode;
,
如果您未使用MySQL 8 (在这种情况下,您将无法使用窗口函数),这是另一种方法...聚合两次,然后加入...
SELECT
city_zip.city,city_zip.zip_code,city_zip.popluation,city_zip.poupluation / city.population AS ratio
FROM
(
SELECT city,sum(population) AS population
FROM myTable
GROUP BY city,zip_code
)
AS city_zip
INNER JOIN
(
SELECT city,sum(population) AS population
FROM myTable
GROUP BY city
)
AS city
ON city.city = city_zip.city
或者,使用相关子查询...
SELECT
city,zip_code,SUM(popluation),SUM(population)
/
(
SELECT SUM(population)
FROM myTable AS city
WHERE city.city = city_zip.city
)
FROM
myTable AS city_zip
GROUP BY
city,zip_code
我不确定较长的代码可能会更快,尽管我不确定。