[解決済み] 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
関連
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] PostgreSQL コマンドラインユーティリティ: psql を終了する方法
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] SQL Server の CASE ステートメントで OR がサポートされていない。
-
[解決済み] SQLでランダムな行を要求する方法は?
-
[解決済み】countとgroup byを同じselect文で使用する方法
-
[解決済み】2つのSELECT文の結果をJOINする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
解決策:java.sql.SQLException: ユーザー ''@'localhost'' (パスワード: YES を使用) のアクセスが拒否されました。
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] SQL Serverでストアドプロシージャ内のテキストを検索する
-
[解決済み] mysqldumpで特定のテーブルをスキップする
-
[解決済み] ある列の最大値を持つ行を取得する
-
[解決済み] 項目xにアクセスできるように文字列を分割するにはどうすればよいですか?
-
[解決済み] 複数の列に対してSELECT DISTINCTする方法(またはできる方法)は?
-
[解決済み] SQLサーバーで行を列に効率的に変換する