You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中合并查询得到按进球数排序的球员姓名及进球数三列结果?

最优解决方案

你不需要拆分两个独立查询再合并,直接单次关联两张表就能得到目标结果,参考语句如下:

SELECT 
    p.name, 
    p.surname, 
    COUNT(g.id) AS goals
FROM players p
INNER JOIN goals g ON p.id = g.player_id
GROUP BY p.id, p.name, p.surname
ORDER BY goals DESC
LIMIT 5;

写法说明

  1. 直接用球员表主键id作为和进球表的关联键,避免姓名重复导致的统计错误
  2. 分组时同时带入球员ID、姓名、姓氏,符合SQL严格模式下的分组语法要求,不会出现非法分组报错
  3. 统计后直接按进球数倒序取前5,一步输出你需要的三列结果,执行效率更高

你之前JOIN丢失数据的原因

你之前写的第二个查询只返回了进球数字段,没有带回对应的player_id关联键,两个子查询合并时没有准确的匹配依据,才会出现数据丢失的情况。如果确实需要用两个子查询合并的写法,可以参考如下语句:

SELECT 
    t1.name,
    t1.surname,
    t2.goals
FROM players t1
INNER JOIN (
    SELECT 
        player_id, 
        COUNT(*) AS goals 
    FROM goals
    GROUP BY player_id
    ORDER BY goals DESC
    LIMIT 5
) t2 ON t1.id = t2.player_id
ORDER BY t2.goals DESC;

内容的提问来源于stack exchange,提问作者AxelCagira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:06:04