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

SQL Server中SELECT内子查询运行报错,如何按平台列展示销量前10游戏

错误原因分析
  • SELECT子句中的子查询(SELECT g_name FROM vgsales$ WHERE g_platform = 'X360')没有限制返回行数,会返回对应平台下所有游戏名称,不符合单列单值的表达式要求,因此触发报错
  • 你需要的多平台前10游戏横向并列展示的需求,无法通过无关联的独立子查询直接实现
正确实现方案

先通过窗口函数给每个平台的游戏按全球销量排序,再按排序序号做横向拼接即可,实现代码如下:

WITH RankedSales AS (
    SELECT 
        g_name,
        g_platform,
        Global_Sales,
        -- 按平台分组,全球销量降序生成排名
        ROW_NUMBER() OVER (PARTITION BY g_platform ORDER BY Global_Sales DESC) AS rn
    FROM vgsales$
)
SELECT 
    x360.g_name AS g_namex360,
    ps2.g_name AS g_nameps2
FROM (SELECT g_name, rn FROM RankedSales WHERE g_platform = 'X360' AND rn <= 10) x360
-- 按排名序号对齐拼接两个平台的前10游戏
FULL JOIN (SELECT g_name, rn FROM RankedSales WHERE g_platform = 'PS2' AND rn <= 10) ps2
ON x360.rn = ps2.rn
ORDER BY COALESCE(x360.rn, ps2.rn);
代码说明
  • 采用全外连接可以避免某一平台游戏数量不足10时,另一平台的排名数据被截断的问题
  • 如果需要保留销量相同并列排名的场景,可以将ROW_NUMBER()替换为RANK(),根据实际需求调整筛选条件即可
  • 后续需要新增其他平台列时,只需要新增对应平台的子查询关联逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:15:06