1. ホーム
  2. sql

[解決済み] COUNT集計に "0"/"0 "の結果を含めるにはどうしたらいいですか?

2022-05-12 23:29:31

質問

SQLで少し困っているところです。質問をうまく表現できないので、お見せしましょう。

personと呼ばれるテーブルとappointmentと呼ばれるテーブルがあります。私は人が持っているアポイントメントの数を返そうとしています(ゼロの場合も含む)。アポイントメントには person_id があり、そこに person_id を予定ごとに設定します。そのため COUNT(person_id) は賢明な方法です。

クエリーは

SELECT person_id, COUNT(person_id) AS "number_of_appointments" 
FROM appointment 
GROUP BY person_id;

person_idが持っているアポイントメントの数を正しく返します。しかし、0件のアポイントメントを持つ人は返されません(明らかにそのテーブルには存在しないため)。

person_idをpersonテーブルから取得するようにステートメントを調整すると、次のようになります。

SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments"
FROM appointment
JOIN person ON person.person_id = appointment.person_id
GROUP BY person.person_id;

しかし、これはまだアポイントメントを持っているperson_idを返すだけで、私が欲しいのはアポイントメントを0個持っている人を返すことではありません!

何かご提案があればお願いします。

どのように解決するのですか?

外部結合が必要です(そして、personをquot;driving"テーブルとして使用する必要があります)。

SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments"
FROM person 
  LEFT JOIN appointment ON person.person_id = appointment.person_id
GROUP BY person.person_id;

これがうまくいっている理由は、外側(左)結合が NULL を返すからです。集計関数 count()NULL の値はカウントされないので、0が返されます。

外部結合についてもっと学びたい場合は、こちらのチュートリアルをご覧ください。 http://sqlzoo.net/wiki/Using_Null