【问题标题】:Query using Group By, Top N and Sum使用 Group By、Top N 和 Sum 查询
【发布时间】:2014-10-08 10:29:25
【问题描述】:

我浏览了论坛,可以找到各种示例来解决我的问题,但无法将所有内容放在一起。

我的情况很典型,我想按组 (Shop_Lookup.ShopGroup]) 显示前 10 位客户 (Orders.[Customer Name]) 的总收入。

到目前为止,无论 ShopGroup 是什么,我都可以生成整体前 10 名,但就是无法让子查询正常工作。我当前的代码是 -

SELECT TOP 10 Orders.[Customer Name], 
              Sum(Orders.[Actual Revenue]) AS [SumOfActual Revenue],
              Orders.[This Month], 
              Shop_Lookup.[ShopGroup]

FROM Orders 
INNER JOIN Shop_Lookup ON Orders.[ShopID] = ShopLookup.[ShopID]    
WHERE ((Orders.[This Month])="current")    
GROUP BY Orders.[Customer Name], Orders.[This Month], Shop_Lookup.[ShopGroup]    
ORDER BY Sum(Orders.[Actual Revenue]) DESC;

【问题讨论】:

  • 好问题。如果您没有快速得到正确答案,请考虑添加最终结果的表示。

标签: sql ms-access ms-access-2007


【解决方案1】:

完全空气编码!请谨慎操作。

您可以使用子查询来获取这个!

SELECT 
    Orders.[Customer Name], 
    Sum(Orders.[Actual Revenue]) AS [SumOfActual Revenue],
    Orders.[This Month], 
    Shop_Lookup.[ShopGroup]
FROM 
    Orders
    INNER JOIN 
    Shop_Lookup 
    ON 
    Orders.[ShopID] = ShopLookup.[ShopID]    
WHERE 
    (
        (Orders.[This Month] = 'Current')
        AND
        (Orders.ShopID IN
            (SELECT 
                TOP 10 ShopID                            
            FROM 
                Orders AS Dupe                              
            WHERE 
                Dupe.ShopID = Orders.ShopID      
            )
        )
    )
GROUP BY 
    Orders.[Customer Name], 
    Orders.[This Month], 
    Shop_Lookup.[ShopGroup]    
ORDER BY 
    Sum(Orders.[Actual Revenue]) DESC;

关于子查询的更多信息:http://allenbrowne.com/subquery-01.html

【讨论】:

  • 我没有对此进行测试,但它看起来不错 - 我正在四处奔走并支持投票。
  • 谢谢@Smandoli,理论上它应该可以工作。但是,如果不进行测试,则无法确认。 :) 感谢您的支持!
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
相关资源
最近更新 更多