pgsql + group by + count()統計結果為零的內容不顯示問題
問題:(pgsql)要查詢newpro.users 中的各個organization下對應的今天註冊的使用者數量?
不用連線查詢時:
由於在newpro.users 表中對時間限制為今天進行過濾時,將不是今天的資訊已經全部過濾掉了,當然也包括organization了額,
所以這裡要用到連線查詢,先查詢表中對應的organizations欄位;
select DISTINCT o.id ,COALESCE(tb.total,0) AS TotalNumfrom from newpro.organizations as o
left join
(select organization,count(*) as total from newpro.users where to_char(created_at,'yyyy-mm-dd')
= TO_CHAR(now(),'yyyy-MM-dd') GROUP BY organization) as tb
on o.id = tb.organization;
說明:COALESCE(tb.total,0):表示查詢欄位為null時輸出0;
SQL SELECT語句完整的執行順序:
1、FROM子句組裝來自不同資料來源的資料;
2、WHERE子句基於指定的條件對記錄進行篩選;
3、GROUP BY子句將資料劃分為多個分組;
4、使用聚集函式進行計算;
5、使用HAVING子句篩選分組;
6、計算所有表示式;
7、使用ORDER BY對結果進行排序。
因此,造成以上結果的原因是因為在SELECT語句中WHERE子句先於GROUP BY執行,因此在執行GROUP BY子句時,表中的記錄已經將created_at不等於今天的記錄過濾掉了,分組處理中自然不會計算在內
使用連線查詢結果: