4

私は近くにいることを知っています、そしてそれは私を殺しています。ここに新鮮な目が必要です...

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)

私は何が間違っているのですか?とても近い!ありがとう!

-マット

4

3 に答える 3

1

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;
于 2012-05-30T08:56:44.180 に答える
1
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
        )
于 2012-05-30T09:01:52.527 に答える
0

私があなたの質問を正しく理解すれば。あなたはこのようなことをすることができます:

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
于 2012-05-30T08:49:55.587 に答える