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
我怀疑较长的代码可能会更快,但我并不完全确定。
我有一个数据集,其中每条记录都包括街道、邮政编码、城市、人口。我想找到(一个邮政编码占整个城市人口的人口百分比)但无法弄清楚如何按邮政编码分组,然后添加一列显示同一城市每个邮政编码的城市总人口。
[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
我怀疑较长的代码可能会更快,但我并不完全确定。