2

次の場合はどうすればよいですか。

今のところ、テーブルAとテーブルBがあり、

A:
id, name, address            //the id is unique
B
id, contact, email

1 人が複数の連絡先と電子メールを持っているか、連絡先も電子メールも持っていない可能性があるため (テーブル B にレコードがないことを意味します)

ここで、0 であっても、各 ID のレコード数を数えたいと思います。結果は次のようになります。

id, name, contact_email_total_count

どうすればそれを行うことができますか(今のところ、テーブルBにレコードがないため、0レコードをカウントする方法しかわかりません)?

4

2 に答える 2

2

その場合、 を使用してからLEFT JOIN、集計と を追加しGROUP BYます。

select a.id, 
  a.name, 
  count(b.id) as contact_email_total_count
from tablea a
left join tableb b
  on a.id = b.id
group by a.id, a.name

デモで SQL Fiddle を参照してください

結合構文を学習するのに助けが必要な場合は、ここで結合の優れた視覚的な説明を参照してください。

あなたのコメントに基づいて、典型的な実行順序は次のとおりです。

  1. から
  2. オン
  3. 加入
  4. どこ
  5. グループ化
  6. 持っている
  7. 選択する
  8. オーダーバイ
于 2013-01-10T18:07:48.870 に答える
0

B に関係なくテーブル A のレコードを維持するには、左結合を実行する必要があります。

PostgreSQL: 左外部結合構文

B のレコード数を集計する必要があります。

PostgreSQL GROUP BY は MySQL とは異なりますか?

于 2013-01-10T18:11:30.983 に答える