iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
自我挑戰組

三十天,PG與我系列 第 10

SQL語法-Aggregation functions

  • 分享至 

  • xImage
  •  

COUNT()計算群組內行數

語法:
SELECT ${columns} COUNT(*) FROM table GROUP BY ${column};
來查詢table中以特定欄位分組,各種欄位內容的計數。
(原始table, facility/booking)
https://ithelp.ithome.com.tw/upload/images/20220910/20114934F22rFaTTbO.png
https://ithelp.ithome.com.tw/upload/images/20220910/20114934sx9U5SozeC.png
(查詢結果,以facility name將booking分組,並統計每個facility的預訂數量)
https://ithelp.ithome.com.tw/upload/images/20220910/20114934euU3AzwUOS.png
針對COUNT的聚合結果如果要進行過濾,則在query後面加入HAVING clause,如下面加入having count(*) > 300來過濾掉預訂數不到三百的設施。
https://ithelp.ithome.com.tw/upload/images/20220910/20114934xD0il5nT3d.png
(COUNT(*)會回傳欄位的數目,而COUNT(column)只會計算該欄位非空的值)
(COUNT DISTINCT回傳的是該欄位出現過幾種不同的數值)

SUM()將群組內的該欄位值加總

語法:
SELECT ${columns} SUM(${column}) FROM table GROUP BY ${column};
以下query透過SUM() aggregate function將每位使用者預定設施的總時數group by之後加總,最後依照每位使用者總時數來由大到小排序
https://ithelp.ithome.com.tw/upload/images/20220910/2011493436kGSGTk11.png

AVG()取群組內該欄位的平均

以下query透過AVG()來得出每項設施的單次平均借用時間
select cd.facilities.name, avg(cd.bookings.slots) * 30 AS "average book time(minutes)"
from cd.bookings join cd.facilities on cd.bookings.facid = cd.facilities.facid
group by cd.facilities.name;
https://ithelp.ithome.com.tw/upload/images/20220910/201149343cIEpVW3um.png

MIN()取群組中該欄位的最小值

以下query將member以id做group by,來從預訂紀錄中找到他們最早一筆(最小值)的預定紀錄
https://ithelp.ithome.com.tw/upload/images/20220910/20114934Qm8L8vPbrr.png

MAX()取群組中該欄位的最大值

取得每項設施最近被預約的時間,query如下:
https://ithelp.ithome.com.tw/upload/images/20220911/20114934736qfHNe20.png


上一篇
SQL語法-CTE
下一篇
SQL語法-window function
系列文
三十天,PG與我30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言