計算平均每日計數似乎是經常會做的事情,但是我從未做過。我問我的妻子是否有這樣做過,她也是資料庫支援的應用程式的程式設計人員,而她也從來沒有機會這樣做!因此,我今天懷着熱誠迎接了這一個挑戰。
要界定什麼是「平均每日計數」,對於本篇文章而言,它說明在醫生辦公室的每月患者數目,一個月內生產的小部件數目或一個月內出售的產品數目。然後通過將每月計數除以一個月中的天數來計算每日平均值,以便我們知道每日計數對每月總數的貢獻。例如,如果一家汽車經銷商在 5 月份銷售了 10 輛本田喜美,那麼這 10 輛交易就意味著平均每天銷售量為 0.32 輛。同時,如果經銷商要在一個月內售出多達 50 輛本田喜美,那麼每日平均銷售量將升至每天 1.61 輪本田思域。
查詢
我們的 SELECT 陳述式將查詢 Sakila 範例資料庫,以以下格式列出每個月的電影租借量:
ID| MONTH | MONTHLY_COUNT | AVG_DAILY_COUNT ------------------------------------------- 1| Jan | 152 | 10.3 2| Jan | 15000 | 1611 3| Jan | 14255 | 2177 1| Feb | 4300 | 113 2| Feb | 9700 | 782 3| Feb | 1900 | 97 etc...
上面的 AVG_DAILY_COUNT 欄增加了查詢的複雜性,因為我們需要首先取得每月的計數。因此,查詢由內部和外部 SELECT 陳述式組成。以下是內部查詢和以年、月和 ventory_id 排序的結果:
外部查詢
從這些資料,我們可以以表列方式列出平均每日計數:
我將每個月的天數包括在內以作參考,因為它在計算每日平均值中起著關鍵作用。這也很有啟發性,因為需要每個月天數才能計算出平均每日計數,因此如何獲得一個月的天數也很有趣。這是與查詢的其餘部分分割出來的程式碼:
datediff(day, datefromparts(rental_year, rental_month, 1), dateadd(month, 1, datefromparts(rental_year, rental_month, 1))) days_in_month
datediff() 函式傳回每月第一天至下個月第一天之間的天數。datefromparts() 函式使用內部查詢的 rental_year 和 rental_month 欄建立一個日期。
我們可以在 daily_avg 的計算中看到相同的程式碼:
round( cast(cnt as FLOAT) / cast(datediff(day, datefromparts(rental_year, rental_month, 1), dateadd(month, 1, datefromparts(rental_year, rental_month, 1))) as FLOAT ), 4 ) daily_avg
請注意,被除數(cnt)和除數(月的天數)都必須轉換為 FLOAT。否則,小數將在計算中被捨棄。我們希望盡可能地保持精確度在四捨五入至四個小數位數。
總結
在今天的文章中,我們使用 Navicat for SQL Server 計算了 SQL Server 中特定欄的平均每日計數。如果你對 Navicat for SQL Server 感興趣,可以免費試用 14 天!