繁体   English   中英

SQL Server 2008-对分组数据进行排序

[英]SQL Server 2008 - Order grouped data by

我需要将CustomerAlertName分组,以获取每个客户有多少个警报,然后我需要按No_Alerts订购结果。 我正在使用此SQL查询:

SELECT Customer, AlertName, COUNT(AlertName) as No_Alerts
FROM Alerts
GROUP BY Customer, AlertName
ORDER BY Customer, No_Alerts DESC

结果是:

     Customer    AlertName    No_Alerts

----------------------------------
1    Cust1       Alert1       12
2    Cust1       Alert7        5
3    Cust1       Alert5        3
4    Cust2       Alert8       32
5    Cust2       Alert4       17
6    Cust2       Alert2        2
7    Cust3       Alert3      234
8    Cust3       Alert4       22
9    Cust3       Alert6        7

但是如何获得以下结果,以便上面的数据由No_Alerts

     Customer    AlertName    No_Alerts

----------------------------------
1    Cust3       Alert3       234
2    Cust3       Alert4        22
3    Cust3       Alert6         7 
4    Cust2       Alert8        32
5    Cust2       Alert4        17
6    Cust2       Alert2         2
7    Cust1       Alert1        12
8    Cust1       Alert7         5
9    Cust1       Alert5         3

提前致谢!

我认为您想按每个客户的警报总数(最大数量)进行订购。 您可以通过添加附加列,使用窗口函数并按以下顺序进行排序:

SELECT Customer, AlertName, COUNT(AlertName) as No_Alerts,
       SUM(COUNT(AltertName)) OVER (PARTITION BY Customer) as TotalCustomerAlerts
FROM Alerts
GROUP BY Customer, AlertName
ORDER BY TotalCustomerAlerts DESC, Customer, No_Alerts DESC;

请注意, order by包括total和Customer 这样可以处理两个客户的总数相同的情况。

如果您确实希望按客户的最大订购量,请使用MAX()而不是SUM()

如果您不想看到多余的列,请使用子查询或CTE。

尽管有特定于供应商的解决方案,但应该可以嵌套您的SELECTS。

外面的一个拥有ORDER BY,内部的一个拥有其余的一切:

SELECT * FROM (SELECT ... GROUP BY ...) ORDER BY ...

您可以通过以下方式在订单中添加其他商品:

SELECT Customer, AlertName, COUNT(AlertName) as No_Alerts
FROM Alerts
GROUP BY Customer, AlertName
ORDER BY Customer DESC, COUNT(AlertName) DESC

不太确定之前,“ No_Alerts”如何按您的顺序工作-如果要按列别名进行排序,则需要将其包装在外部查询中,如下所示:

SELECT *
FROM (
    SELECT Customer, AlertName, COUNT(AlertName) as No_Alerts
    FROM Alerts
    GROUP BY Customer, AlertName
) tableThing
ORDER BY Customer DESC, No_Alerts DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM