Group-By

COUNT(*) 和 COUNT(atribute_一種噸噸r一世b你噸和attribute) 在以下情況下?

  • March 17, 2014

我有以下表格:

部

部門編號
部門名稱
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)計算所有非空值。

SQL小提琴

但在結果中,沒有員工的員工不會出現在結果中。

我不知道你為什麼看到那個。對於沒有員工的部門,您的查詢返回計數 1。

SQL小提琴

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