[英]ORDER BY an aggregated column in Report Builder 3.0
在Report Builder 3.0上,我檢索了一些項目,並使用Count聚合對它們進行了計數。 現在我要從最高到最低排序。 如何在匯總列上使用ORDER BY函數? 下圖顯示了我要排序的一列,它已被打勾。
該代碼非常簡單,如下所示:
SELECT DISTINCT act_id,NameOfAct,
FROM Acts
我看着照片。 因此,您可能有相同名稱的重復行為。 並且您想知道具有相同唯一名稱的行為的數量。
您可能要按名稱對結果進行分組:
GROUP BY NameOfAct
並在查詢結果中包含行為名稱及其計數:
SELECT NameOfAct, COUNT(*) AS ActCount
(由於act_id列未包含在組中,因此您需要在SELECT中將其省略。由於所有組都是唯一的,因此DISTINCT也不再是必需的。)
最后,您可以對數據進行排序(可能下降以使計數最高的行為排在最前面):
ORDER BY ActCount DESC
您完整的查詢將變成這樣:
SELECT NameOfAct, COUNT(*) AS ActCount
FROM Acts
GROUP BY NameOfAct
ORDER BY ActCount DESC
編輯:
順便說一句,您在SELECT子句中使用字段“ act_id”。 這有點令人困惑。 如果您想知道計數,則需要查看完整的表數據或將表數據分組為較小的組(使用GROUP BY子句)。 然后,您可以使用集合函數來獲取有關這些組(或整個表)的更多信息,例如計數,平均值,最小值,最大值...
如果要對分組數據使用統計/匯總方法,則單記錄信息(例如您的案例的ID)通常並不重要。 假設您的查詢返回的行為名稱被使用了10次。 然后,表中有10條記錄,每條記錄都有唯一的act_id,但名稱相同。
如果只需要一個代表每個組/行為名稱的act_id(並假設act_id是一個自動編號字段),則可以使用MAX聚合函數在查詢中包括最新的/最大的act_id值:
SELECT NameOfAct, COUNT(*) AS ActCount, MAX(act_id) AS LatestActId
(查詢的其余部分保持不變。)
您的圖片表明您還希望在底部有一個Total
行:
SELECT
COALESCE(NameOfAct,'Total') NameOfAct,
COUNT(DISTINCT act_id) c
FROM Acts
GROUP BY ROLLUP(NameOfAct)
ORDER BY
CASE WHEN NameOfAct is null THEN 1 ELSE 0 END,
c DESC;
示例數據的結果:
NameOfAct count
-------------- -------
Act_B 3
Act_A 2
Act_Z 1
Total 6
在以下示例行中嘗試使用: http : //sqlfiddle.com/#!18/dbd6c/2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.