Group-By
COUNT(*) 和 COUNT(atribute_一種噸噸r一世b你噸和attribute) 在以下情況下?
我有以下表格:
部 部門編號 部門名稱 manager_id location_id
和
僱員 員工ID 名 姓 電子郵件 電話號碼 僱用日期 job_id 薪水 佣金_pct manager_id 部門編號
我想計算每個部門工作的員工人數。
我使用了以下查詢:
SELECT department_name, count(*) FROM departments d LEFT OUTER JOIN employees e ON e.department_id = d.department_id GROUP BY department_name;
但在結果中,沒有員工的員工不會出現在結果中。我希望員工人數顯示為 0。我該怎麼做?
在速度方面:
據我所知,這兩個查詢(select count(*) 或 Select Count(id))都使用相同的執行計劃,因此只要從緩衝池或磁碟不混合獲取塊,就應該使用相同數量的 CPU。
就結果而言,在您的情況下:
- 如果你說count(*),那麼即使你沒有員工,它也會計算行,因為你正在左加入。
- 如果你說計數(employee_id),那麼這只會計算“存在”的行,而不是空行。我認為這就是你需要為你的情況設置的 0
- 如果您想提及該欄位並且即使沒有行也想計算它,您必須說 count(NVL(employee_id, 123)) 而 123 是任何值,以防 null
我希望員工人數顯示為 0。我該怎麼做?
select d.department_name, count(e.employee_id) from departments d left outer join employees e on e.department_id = d.department_id group by d.department_name;
count(*)
將計算所有行併count(e.employee_id)
計算所有非空值。但在結果中,沒有員工的員工不會出現在結果中。
我不知道你為什麼看到那個。對於沒有員工的部門,您的查詢返回計數 1。