【问题标题】:dependent SQL subquery returns too few rows依赖 SQL 子查询返回的行太少
【发布时间】:2024-04-25 08:55:02
【问题描述】:

我有一个按商店划分的数百个品牌的销售额列表,我想按销售额获得每个商店排名前 100 的品牌。

不知什么原因,每家商店只退货 99 个品牌。 (来源表中,每家店铺900多个品牌。)

这是我的疑问:

SELECT TOP (100) PERCENT SHOP, BRAND, SALES
FROM dbo.[DATA] AS D
WHERE (BRAND IN
   (SELECT TOP (100) WITH TIES BRAND
        FROM DATA
        WHERE (SHOP= D.SHOP)
        ORDER BY SALES DESC
    )
)
ORDER BY BRAND, SALES DESC

出了什么问题?

【问题讨论】:

  • 添加了基于dbo前缀和非标准([..])“引用”样式的sql-server标签

标签: sql sql-server tsql correlated-subquery


【解决方案1】:

我认为你想要做的可以通过以下查询来实现

SELECT Q.SHOP
     , Q.BRAND
     , Q.SALES
FROM (
    SELECT SHOP
         , BRAND
         , SALES
         , ROW_NUMBER() OVER (PARTITION BY SHOP ORDER BY SALES DESC) rn 
    FROM dbo.[DATA]
    ) Q
WHERE Q.rn <= 100
ORDER BY Q.BRAND, Q.SALES DESC

【讨论】:

  • 非常感谢。您的方法非常有效,而且速度极快。 (900 万行在 10 秒内聚合和排序!!!)