SQL中合并两同列名表求和,获取Top5最热门名称的方法
解决方法
要找出两个表合并后Top5最热门的名称,核心逻辑是先合并两年的所有数据,再按名称分组汇总总次数,最后取排序后的前5。正确的SQL语句如下:
SELECT name, SUM(count) AS total_count FROM ( -- 合并两个表的所有记录 SELECT name, count FROM names_2014 UNION ALL SELECT name, count FROM names_2015 ) AS combined_names GROUP BY name ORDER BY total_count DESC LIMIT 5;
为什么你的原有语句不对?
你之前的错误在于合并了「未分组的2014年单条数据」和「已分组汇总的2015年数据」,这会导致:
- 2014年的
count是单条记录的数值,而非该名称在2014年的总次数(如果同一个名称在2014年有多个gender记录,会被当成多条独立数据) - 合并后的结果是2014的单条记录和2015的汇总记录混合,无法得到跨两年的总次数
额外说明
如果需要区分性别统计热门名称,只需要在分组和选择字段中加入gender即可:
SELECT name, gender, SUM(count) AS total_count FROM ( SELECT name, gender, count FROM names_2014 UNION ALL SELECT name, gender, count FROM names_2015 ) AS combined_names GROUP BY name, gender ORDER BY total_count DESC LIMIT 5;
内容的提问来源于stack exchange,提问作者Akotic
相关产品推荐
相关产品推荐

