2017-09-20 23 views
0

私が選択したいSQL:特定の列に一意である選択行は

id1  question1 id2 question2 
1123 q1   2  q2 
1123 q1   3  q3 
1123 q1   1231 q142 
2431 q12   1231 q142 

(IDは増分ではなく、ランダムに考えることができる)

のスキームで質問ペアのテーブルを持っていますID1とID2の両方で一意であるタプルは、例えば上記の例のための所望の出力は次のようになります。

id1  question1 id2 question2 
1123 q1   2  q2 
2431 q12   1231 q142 

は事前にお願いします。

+1

ランキングを使用することができます。自分で問題を解決しようとする試みが必要です。あなたがそれを働かせることができない場合は、あなたが試したものを投稿してください。それらの列でデータをグループ化するには 'GROUP BY'を使用し、グループに含まれる行の数を数えるには' COUNT(*) 'を使います。カウントが '1'のときは、ユニークです。 – Barmar

+0

希望する出力が説明と一致しません。出力に 'id1 = 1123、id2 = 3'がないのはなぜですか?それはまたユニークな組み合わせです。 – Barmar

+0

と表示されているため、現在id1 = 1123が表示されています。問題は、別々に2つの列に「別個」を使用する方法がわからないことです。 –

答えて

1

ネストされたクエリを使用します。

SELECT * 
FROM (SELECT * 
     FROM yourTable 
     GROUP BY id1) AS x 
GROUP BY id2 

しかし、これがどのようにグループ化を行うのかは予測できません。サブクエリが

id1  id2 
1123 1231 
2431 1231 

を選択した場合、最終的な結果は次のようになります。

id1  id2 
1123 1231 

または

id1  id2 
2431 1231 

私はそれがほとんどで結果を生成するので、それを変更するかどうかはわかりません可能な組み合わせ。

0

あなたはSOの無料コーディングサービスではないとしても

SELECT id1, 
     question1, 
     id2, 
     question2 
    FROM (SELECT CASE id1 
        WHEN @curType 
        THEN @curRow := @curRow + 1 
        ELSE @curRow := 1 AND @curType := id1 
       END rank, 
       id1, 
       question1, 
       id2, 
       question2 
      FROM q, 
       (SELECT @curRow := 0, @curType := '') r 
      ORDER BY id1, id2 
     ) t 
WHERE rank = 1 

結果

rank id1 id2 
1 1123 2 
1 2431 1231 
関連する問題