我怎样才能按指定的聚合值对这个结果集进行排序?
How can I order this result set by the named aggregate value?
我有这个查询:
Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty'
from Invoice
where Unit = 'Sodexo'
group by PADescription, PAItemCode
...这就是我想要的,除了我需要根据最后一列中的值对结果进行降序排序 (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(否则不是)。当我将 "Qty" 夹在单引号内时也是如此:
. . .
order by Qty
如何让这个结果集按聚合值降序排序?
那是在 MySQL 上工作。
您可以尝试的一件事是像这样更改别名:
Select PAItemCode, PADescription, Sum(Qty) as 'Qtysum'
from Invoice
group by PADescription, PAItemCode
order by Qtysum desc
Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty'
from Invoice
where Unit = 'Sodexo'
group by PADescription, PAItemCode
order by Sum(Qty) desc
这应该有效
代码的问题是聚合中使用的列和别名列具有相同的名称。将别名列名重命名为其他名称并按此新别名排序
你还必须 按顺序包含 SUM(Qty) ,但我的意见是 use with statement / CTE,它是更具可读性,您还可以对分组数据应用其他逻辑
如果您在 select 语句中使用了任何同意函数并且您还想在 GROUP BY OR ORDER BY[=23 中使用它=] 你必须也应用相同的逻辑。
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
我有这个查询:
Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty'
from Invoice
where Unit = 'Sodexo'
group by PADescription, PAItemCode
...这就是我想要的,除了我需要根据最后一列中的值对结果进行降序排序 (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(否则不是)。当我将 "Qty" 夹在单引号内时也是如此:
. . .
order by Qty
如何让这个结果集按聚合值降序排序?
那是在 MySQL 上工作。 您可以尝试的一件事是像这样更改别名:
Select PAItemCode, PADescription, Sum(Qty) as 'Qtysum'
from Invoice
group by PADescription, PAItemCode
order by Qtysum desc
Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty'
from Invoice
where Unit = 'Sodexo'
group by PADescription, PAItemCode
order by Sum(Qty) desc
这应该有效
代码的问题是聚合中使用的列和别名列具有相同的名称。将别名列名重命名为其他名称并按此新别名排序
你还必须 按顺序包含 SUM(Qty) ,但我的意见是 use with statement / CTE,它是更具可读性,您还可以对分组数据应用其他逻辑
如果您在 select 语句中使用了任何同意函数并且您还想在 GROUP BY OR ORDER BY[=23 中使用它=] 你必须也应用相同的逻辑。
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