mySQL:是否可以将计算出的列与具有相同共享值的所有其他行的总和相加

问题描述

我有一个数据集,每个记录都包括街道,邮政编码,城市,人口。我想查找(一个邮政编码的人口百分比代表整个城市的人口),但无法弄清楚如何按邮政编码分组,然后添加一列来显示同一城市中每个邮政编码的城市总人口。

[正在尝试查找(城市总数和城市百分比)]

我尝试的代码

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

我不确定较长的代码可能会更快,尽管我不确定。