【问题标题】:Order By Sums, while not grouping like rows按总和排序,而不是像行一样分组
【发布时间】:2015-08-24 16:18:46
【问题描述】:

假设我有一个看起来像这样的数据作为查询的结果

SKU   |  STOCK  |  SNACK  |  FLAVOR 
1234       45       Chips     BBQ
1236       87       Chips     BBQ
2345       12       Pretzel   Bacon
3456       51       Chips     Ranch
4567       32       Pretzel   Classic
5678      142       Candy     Chocolate
...       ...       ...       ...

是否可以在ORDER BY 行中使用 SQL,它允许我显示上述数据,首先按具有最大 SUM(Stock) 的任何小吃(薯片、椒盐卷饼、糖果等)排序,然后按 Stock DESC同时不合并任何条目?我短暂地尝试使用类似于

的行
 ORDER BY 
 SUM(Snack) DESC,
 SUM(Flavor) DESC,
 Stock DESC 

但无法确定 GROUP BY 语句的布局方式。

【问题讨论】:

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


    【解决方案1】:

    您可以使用DSum 计算每个SNACK 的总STOCK,而无需GROUP BY。并在ORDER BY 中使用Dsum。我还需要在 DSum 值上使用 Val() 以使其正确排序。

    SELECT y.SKU, y.STOCK, y.SNACK, y.FLAVOR
    FROM YourTable AS y
    ORDER BY
        Val(DSum("[STOCK]", "YourTable", "[SNACK]='" & y.SNACK & "'")) DESC,
        y.STOCK DESC;
    

    请注意,DSum 是特定于 Access 的,因此如果您想要一个可以移植到另一个数据库的查询,这不适合。

    【讨论】:

    • 我找到了问题所在。 Offer_Size 的一些可能值以英寸为单位列出,使用 " 作为英寸的通知符。引号稍微改变了 DSum 代码。有关该字段数据类型的注释向我提供了提示。再次感谢您你的帮助,再次!
    【解决方案2】:

    用下面的 SQL 试试

    select sku, stock, data.snack, flavor, summ = summ.summ  
    from data
    join (select snack, summ = sum(stock) from data group by snack) as summ
    on summ.snack = data.snack
    order by summ desc, stock desc
    
    SKU|STOCK|SNACK|FLAVOR|SUMM
    1236 87 Chips BBQ 183 
    3456 51 Chips Ranch 183 
    1234 45 Chips BBQ 183 
    5678 142 Candy Chocolate 142 
    4567 32 Pretzel Classic 44 
    2345 12 Pretzel Bacon 44 
    

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 2017-06-11
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多