mySQL:我可以添加一个计算列,其中包含具有相同共享值的所有其他行的总和吗

mySQL: Can I add a calculated column with the sum of all other rows that have that same shared value

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

[Ex 试图找到 (Sum_of_City 和 Percent_of_City)]

我试过的代码:

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;

使用window函数:

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 (在这种情况下您不能使用 Window 函数),这里有一个替代方法。 ..聚合两次,然后加入...

SELECT
  city_zip.city, city_zip.zip_code, city_zip.popluation, city_zip.poupluation / city.population AS ratio
FROM
(
    SELECT city, zipcode, 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

或者,使用 correlated-subquery...

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

我怀疑较长的代码可能会更快,但我并不完全确定。