[英]SQL Server 2008 - Order grouped data by
我需要将Customer
和AlertName
分组,以获取每个客户有多少个警报,然后我需要按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.