Postgresql
我正在嘗試查找 COUNT 請求的平均值
我已經從發票表中完成了下面的查詢,該表為我提供了附加到每個房屋 ID 的總發票。所以 house_id 114 附有 14 張發票。有沒有辦法將此結果輸入到查詢中,以查找每所房屋的平均發票數量。
SELECT h_id AS house_id, COUNT (h_id) AS total_invoices FROM maintenance GROUP BY house_id ORDER BY total_invoices DESC
house_id total_invoices 114 14 116 11 46 10
使用子選擇查詢,您可以在查詢
AVG
之上應用該函式COUNT
以獲得單個平均值,如下所示:SELECT AVG(InvoiceCounts.total_invoices) FROM ( SELECT COUNT (h_id) AS total_invoices FROM maintenance GROUP BY house_id ) InvoiceCounts
SQL 的優點之一是它在關係運算符下是封閉的。即查詢的結果是您可以再次查詢的派生表。因此,您只需將 avg 應用於計數查詢的結果。
此外,您可以使用分組集在單個查詢中獲取計數和平均值。我使用的是按多維數據集分組,因為只涉及一列:
select house_id, avg(cnt) from ( select house_id, count(1) as cnt from maintenance group by house_id ) as t group by cube (house_id) house_id avg 11.6666666666666667 116 11.0000000000000000 114 14.0000000000000000 46 10.0000000000000000
house_id 為空的行是總平均值。代替
group by cube (house_id)
,group by grouping sets ( (house_id), () )
可以被使用。見小提琴