2016-08-28 4 views
-2

SQLクエリの作成を手伝ってもらえますか?例えば他のフィールドが重複しないようにするためのSQLクエリ

私はこのテーブルtableあります

FK1 | FK2 
1 | 1 
1 | 2 
1 | 3 
1 | 4 
1 | 1 (duplicated ID) 
2 | 1 
2 | 2 
2 | 3 
2 | 5 

を、私はそのように、カウント明確なFK2行ですべてFK1グループを取得したいと思います:

FK1 | COUNT(FK2) 
1 | 4 // (Distinct ID : 1, 2, 3, 4) 
1 | 1 // (Distinct ID : 1) 
2 | 4 // (Distinct ID : 1, 2, 3, 5) 

はSQLで、それは可能ですか?たぶん、ネストされたクエリで、私は知らない...

は(私は願って)あなたの答えをありがとう

フィル

+0

期待される結果に2行目( '1 | 1 //(Distinct ID:1)')があるのはなぜですか?これを説明してください。 – 1000111

+0

'FK2 = 1'は何回2回カウントしますか? –

答えて

0

うーん。 。 。

select fk1, rn, count(*) 
from (select t.*, 
      (@rn := if(@fk2 = fk2, @rn + 1, 
         if(@fk2 := fk2, 1, 1) 
         ) 
      ) as rn 
     from t cross join 
      (select @fk2 := -1, @rn := 0) params 
     order by fk1, fk2 
    ) t 
group by fk1, rn; 

少なくとも、これは指定した結果セットを返します。

関連する問題