簡體   English   中英

MySQL計數行包括零(非常接近我想要的!)

[英]MySQL count rows include zero (so close to what I want!)

我知道我很近,它正在殺了我。 這里需要新鮮的眼睛...

SELECT 
first_name, 
COUNT(*) FROM 
(SELECT first_name, job_status FROM typesetting 
LEFT JOIN employees ON typesetting.employees_id = employees.id 
LEFT JOIN job_status ON typesetting.job_status_id = job_status.id 
WHERE job_status NOT LIKE 'Archived' 
ORDER BY first_name ASC) 
AS CNT 
GROUP BY first_name

這使我:

  • 阿諾(5)
  • 克勞迪婭(19)
  • 珍妮特(29)
  • 豐富(21)
  • 湯姆(4)
  • 未分配(24)

但是,我迫切希望其中包含一些值為零的結果,如下所示:

  • 阿諾(5)
  • 謝麗爾(0)
  • 克勞迪婭(19)
  • 辛迪(0)
  • 珍妮特(29)
  • 菲爾(0)
  • 豐富(21)
  • 湯姆(4)
  • 未分配(24)

我究竟做錯了什么? 很近! 謝謝!

-馬特

在INNER查詢中,您過濾掉了所有可能會給您0結果的人。

試試這個:

SELECT first_name,
       sum(CASE WHEN job_status = 'Archived' THEN 1 ELSE 0 END) AS cnt
  FROM typesetting 
  LEFT JOIN employees ON typesetting.employees_id = employees.id 
  LEFT JOIN job_status ON typesetting.job_status_id = job_status.id 
GROUP BY first_name
ORDER BY first_name ASC;
SELECT  first_name, COUNT(js.id)
FROM    employees e
LEFT JOIN
        typesetting ts
ON      ts.employees_id = e.id
LEFT JOIN
        job_status js
ON      js.id = ts.job_status_id
        AND js.status <> 'Archived'
GROUP BY
        first_name
UNION ALL
SELECT  'Unassigned', COUNT(*)
FROM    typesetting ts
JOIN    job_status js
ON      js.id = ts.job_status_id
        AND js.status <> 'Archived'
WHERE   ts.employees_id NOT IN
        (
        SELECT  id
        FROM    employees
        )

如果我的查詢正確無誤。 您可以執行以下操作:

SELECT
    employees.first_name,
    (
        SELECT
            COUNT(*)
        FROM
            typesetting
            JOIN job_status ON typesetting.job_status_id = job_status.id 
        WHERE
            typesetting.employees_id = employees.id
            AND job_status NOT LIKE 'Archived' 
    )
FROM
    employees
ORDER BY 
    first_name ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM