【问题标题】:Select Top 7, combine rest as 'Others' using "NOT IN" is too slow选择前 7 名,使用“NOT IN”将其余部分组合为“其他”太慢
【发布时间】:2014-02-04 21:12:18
【问题描述】:

我想通过支出选择前 7 个类别,然后将其余类别归为“其他”。这段代码似乎可以工作,但运行至少需要 20 分钟,我认为是因为 NOT IN 有时不适用于索引。

我的数据库有大约 2 万条记录

SELECT [Category], [Total Spending] FROM

   (SELECT TOP 7  [Category], SUM([Spending]) AS [Total Spending]
      FROM Data
      GROUP BY [Category]
      ORDER BY SUM([Spending]) DESC
   ) AS Q1

   UNION ALL

   SELECT'Other' AS [Category], SUM(Spending) AS [Total Spending]
      FROM Data
      WHERE Category NOT IN 
         (SELECT TOP 7 [Category]
          FROM Data
          GROUP BY [Category]
          ORDER BY SUM([Spending]) DESC)

我的问题是这两个问题的组合,都回答了:

Select Top (all but 10) from ... in Microsoft Access

Very slow subqueries when using "NOT IN"

【问题讨论】:

    标签: sql performance ms-access-2010 grouping aggregate-functions


    【解决方案1】:

    首先选择进入临时表。在第二个查询中选择。使用第一个温度的类别。 然后使用 select 和 temp 的联合。

    【讨论】:

    • 感谢您的回答。您能否更具体地说明在这种情况下在一个查询中创建临时表的语法?我对它进行了一个小时左右的研究,但无法让它发挥作用。
    猜你喜欢
    • 2021-03-08
    • 2022-01-15
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2020-05-10
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多