Postgresql

我正在嘗試查找 COUNT 請求的平均值

  • November 28, 2020

我已經從發票表中完成了下面的查詢,該表為我提供了附加到每個房屋 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), () )可以被使用。

小提琴

引用自:https://dba.stackexchange.com/questions/280490