2017-07-26 14 views
0

2つのテーブルがあり、1はPersons、1はRelationshipsです。結合されたテーブルのSQLカウント

ほとんどの子供がいる人を検索したいと思います。

は現在、私はこのようなテーブルを結合しています:

SELECT 
    PERSONS.ID, 
    PERSONS.NATIVE_COUNTRY, 
    RELATIONSHIPS.PERSON_ID, 
    RELATIONSHIPS.RELATION 
FROM PERSONS 
INNER JOIN RELATIONSHIPS ON RELATIONSHIPS.PERSON_ID = ID 
          AND RELATIONSHIPS.RELATION = 'child'; 

は今、私はPERSONS.IDをカウントし、最大を取得しようとしますが、それを行う方法がわかりませんよ。

+0

あなたのテーブルと期待される結果についての詳しい情報はありますか? –

答えて

0

あなたはグループを使ってみることができます:

SELECT PERSONS.ID, COUNT(*) "No of Children" FROM PERSONS INNER JOIN RELATIONSHIPS ON RELATIONSHIPS.PERSON_ID = ID AND RELATIONSHIPS.RELATION = 'child' GROUP BY persons.id;

+0

ありがとう、シンプルと作品 –

+0

私の答えを受け入れてくれてありがとう:) – ihm017

3

はあなたがまた

SELECT PERSONS.ID, PERSONS.NATIVE_COUNTRY, RELATIONSHIPS.PERSON_ID, 
     RELATIONSHIPS.RELATION, 
     COUNT(*) 
FROM PERSONS 
INNER JOIN RELATIONSHIPS ON RELATIONSHIPS.PERSON_ID = ID AND 
          RELATIONSHIPS.RELATION = 'child'; 
GROUP BY PERSONS.ID, PERSONS.NATIVE_COUNTRY, RELATIONSHIPS.PERSON_ID, 
      RELATIONSHIPS.RELATION 

してパーティションを好きではない場合は、単純なGROUP BYを行うことができ、

SELECT PERSONS.ID, PERSONS.NATIVE_COUNTRY, RELATIONSHIPS.PERSON_ID, 
     RELATIONSHIPS.RELATION, 
     count(*) over (partition by Persons.ID order by Persons.ID) 
FROM PERSONS 
INNER JOIN RELATIONSHIPS ON RELATIONSHIPS.PERSON_ID = ID AND 
          RELATIONSHIPS.RELATION = 'child'; 

...またしてパーティションを使用することができ、使用している場合は、使用しようとする加入しますエイリアス、それは読みやすくするために、すべての大文字の理由の理由がない

+0

私は同様の質問の新しいスレッドを開きたくありません:データベース内の各国のある国の人の子供の平均数を取得しようとしています(Persons.Countryフィールドがあります) –

+0

'この結合のカントリーテーブル、およびカウントの代わりに単にAVG関数を使用 – Veljko89

関連する問題