2017-10-18 26 views
1

私はそれを自己参照するテーブルを持っています(招待する)。私が各patient_profileが招待されたpatient_profilesの数を取得したいというコラムinvited_by_idがあります。これどうやってするの?別のSELECT文または結合を使用する必要がありますか?同じテーブルの異なるカラムのSQLカウントの合計

私はカウント(SELECT * WHERE p.id = invited_by_id)のようになりますが、どこに置くのかは分かりません。

SELECT 
    host.id 
, host.first_name 
, host.last_name 
, count(invitee.invited_by_id) as invited_count 
FROM patient_profiles AS host 
JOIN patient_profiles AS invitee ON invitee.invited_by_id = host.id 
GROUP BY host.id, host.first_name, host.last_name 

アイデアは(hostと上記invitee異なる別名の下でそれ自体にテーブルを結合するためにある:表は自己参照を持っているとき、あなたは自己結合とそれを照会することができ

SELECT p.first_name, 
FROM patient_profiles AS p 
+2

ことを行うためにJOINを使用することができますしてください** [EDIT] **あなたの質問といくつかの[サンプルデータ]を追加します(http://plaintexttools.github.io/plain- text-table /)と、そのデータに基づく予想される出力。 [**フォーマットされたテキスト**](http://stackoverflow.com/help/formatting)、** **スクリーンショットはありません**(http://meta.stackoverflow.com/questions/285551/why-may -i-not-upload-images-of-code-on-so-asking-a-question/285557#285557)。 ** [編集] **あなたの質問 - コメントを投稿するコードや追加情報はありません**。 –

答えて

1

)。招待者はinvitee.invited_by_id = host.idの条件でホストにリンクされます。その後、結果はGROUP BYで平準化され、プロファイルのリストがカウントとともに生成されます。

注:上記は、誰も招待しないプロフィールは表示されません。見たい場合は、LEFT OUTER JOINに切り替えてください。

+0

LEFT OUTER JOINを使用したいと思いますが、カウント(*)は何になりますか? – user2954587

+0

@ user2954587編集前の数は1になります。編集後はゼロになります。 – dasblinkenlight

0

はい、あなたは

SELECT 
    p.id, 
    p.first_name, 
    COUNT(p2.id) AS "Invitations" 
FROM patient_profiles p 
    LEFT JOIN patient_profiles p2 ON p2.invited_by_id = p.id 
GROUP BY 
    p.id, 
    p.first_Name 
関連する問題