【问题标题】:How can I order this result set by the named aggregate value?如何按命名聚合值排序此结果集?
【发布时间】:2016-09-14 22:47:37
【问题描述】:

我有这个查询:

Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty'
from Invoice
where Unit = 'Sodexo'
group by PADescription, PAItemCode

...这就是我想要的,除了我需要根据最后一列中的 val 对结果进行降序排序(Sum(Qty) as 'Qty')

有了这个:

Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty'
from Invoice
where Unit = 'Sodexo'
group by PADescription, PAItemCode
order by Qty

...所有数量都是 0(否则它们不是)。当我将“数量”夹在单引号内时也是如此:

. . .
order by Qty

如何让这个结果集按聚合值降序排列?

【问题讨论】:

  • 我会非常小心地使用像 'Qty' 这样的别名——其中的某些形式已被弃用,而且在任何情况下看起来都像是字符串文字。在 SQL Server 中,我更喜欢专有的 [Qty]当需要引用标识符时,但在这种情况下它们不是,因为 Qty 不是保留字或关键字。
  • 很高兴知道,谢谢。

标签: sql-server sum sql-order-by


【解决方案1】:

您还必须按顺序包含 SUM(Qty),但我的意见是使用 with statement / CTE,它更具可读性,您也可以应用其他分组数据的逻辑

如果您在 select 语句中使用了任何同意函数,并且您还想在 GROUP BYORDER BY 中使用该函数,则您也必须应用相同的逻辑。

SELECT 
    TOP 10 PAItemCode, 
    PADescription, 
    Sum(ISNULL(Qty,0)) as 'Qty'
FROM Invoice
WHERE Unit = 'Sodexo'
GROUP BY PADescription, PAItemCode
ORDER BY Sum(ISNULL(Qty,0))

替代方式使用 CTE/With 语句:

;WITH T AS
(
    SELECT 
        TOP 10 PAItemCode, 
        PADescription, 
        Sum(ISNULL(Qty,0)) as 'Qty'
    FROM Invoice
    GROUP BY PADescription, PAItemCode
    WHERE Unit = 'Sodexo'
)
SELECT 
    T.PAItemCode,
    T.PADescription,
    T.Qty
FROM T  
ORDER BY T.Qty

【讨论】:

  • 我更喜欢 CTE。
  • 美洲狮追踪大象?
  • 我无法得到你@shannon
  • CTE 代表什么?
  • 公用表表达式 (CTE) 可以被认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集
【解决方案2】:
Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty'
from Invoice
where Unit = 'Sodexo'
group by PADescription, PAItemCode
order by Sum(Qty) desc

这应该可行

【讨论】:

    【解决方案3】:

    代码的问题是在聚合和别名列中使用的列具有相同的名称。将别名列名重命名为其他名称并按此新别名排序

    【讨论】:

      【解决方案4】:

      这适用于 MySQL。 您可以尝试的一件事是像这样更改别名:

      Select PAItemCode, PADescription, Sum(Qty) as 'Qtysum' 
      from Invoice 
      group by PADescription, PAItemCode 
      order by Qtysum desc
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-28
        • 2014-03-24
        • 2019-04-02
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        相关资源
        最近更新 更多