[英]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
這使我:
但是,我迫切希望其中包含一些值為零的結果,如下所示:
我究竟做錯了什么? 很近! 謝謝!
-馬特
在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.