SQL技术实现:按国家汇总收入后关联人口表计算人均收入
计算各国人均Revenue的SQL实现
核心思路
先按国家汇总COMPANIES表的总营收,再通过国家字段关联人口表,最终用总营收除以对应国家的人口数得到人均值,同时处理可能的异常情况(比如人口为0或无匹配数据)。
基础实现(内连接,仅保留两表都有的国家)
假设人口表名为POPULATION,包含字段Country(国家名)和Population(人口数),SQL语句如下:
SELECT c.Country, SUM(c.Revenue) AS Total_Revenue, p.Population, -- 避免除以0错误,同时保留两位小数 CASE WHEN p.Population = 0 THEN NULL ELSE ROUND(SUM(c.Revenue) / p.Population, 2) END AS Per_Capita_Revenue FROM COMPANIES c JOIN POPULATION p ON c.Country = p.Country GROUP BY c.Country, p.Population;
扩展实现(左连接,保留所有有营收数据的国家)
如果需要保留那些在人口表中没有对应数据的国家,改用LEFT JOIN:
SELECT c.Country, SUM(c.Revenue) AS Total_Revenue, p.Population, CASE WHEN p.Population IS NULL OR p.Population = 0 THEN NULL ELSE ROUND(SUM(c.Revenue) / p.Population, 2) END AS Per_Capita_Revenue FROM COMPANIES c LEFT JOIN POPULATION p ON c.Country = p.Country GROUP BY c.Country, p.Population;
关键说明
JOIN/LEFT JOIN:通过国家字段匹配两张表的数据,确保营收和人口对应同一国家SUM(c.Revenue):按国家聚合计算总营收CASE语句:处理人口为0或无匹配数据的异常,避免出现除以0的错误ROUND函数:将人均值保留两位小数,提升结果可读性GROUP BY:必须包含所有非聚合字段(Country和Population),符合SQL标准规范
内容的提问来源于stack exchange,提问作者Cyclotron
相关产品推荐
相关产品推荐

