-1

をフェッチするためのSQLクエリを提案してください

「学生が複数の科目で同じスコアを持っている場合、学生が同じスコアを持っている学生と対応する科目のリスト」

例えば。

Student Subject Score
John    Science 80
John    Maths   80
John    English 80
John    French  80
Peter   Science 85
Peter   Maths   70
Peter   English 70
Peter   French  70
Mathews French  70

Expected Result :
John    Science
John    Maths
John    English
John    French
Peter   Maths
Peter   English
Peter   French

試した-

select person , subject where person in 
( select person , score , count(score) group by person , score having count(score) > 1 )

しかし、この「ピーターサイエンス」には必須ではないが表示されます。

手伝ってください。

ありがとう

4

4 に答える 4

3

試す:

select person , subject 
from table t
  join 
     ( select person , score , count(score) 
       from table
       group by person , score having count(score) > 1 
     ) foo
       on t.person = foo.person
 where t.person = foo.person 
   and t.score = foo.score

クエリが機能しなかった理由(テーブルが含まれていないことを除く):内部クエリは、基準に一致する生徒とスコアを選択することでした。しかし、あなたの外側の質問は、基準に一致するすべての学生のためにすべてを選択することでした。それが「ピーターサイエンス」が含まれていた理由です。したがって、外部クエリの結果を、すべての基準に一致する結果のみに制限する必要がありました。

于 2013-03-22T12:37:00.597 に答える
0

これで試してください:

select student, subject
from Person 
where student + cast(score as varchar(20)) in 
(   
    select student + cast(score as varchar(20)) from Person group by student,score having count(score) > 1 
)
于 2013-03-22T12:38:43.530 に答える
0

使用しているRDBMSを教えてください。しかし、これはどこでも機能するはずです:

select 
    t.*
from <tableName> t
join (
    select
        student, score
    from <tableName>
    group by 
        student, score
    having count(*)>1 
) x
on  t.student=x.student
and t.score=x.score

FROM <tableName>ところで、あなたはあなたのクエリに欠けています。

于 2013-03-22T12:33:14.293 に答える
0

次の例のように、この目標の自己結合テーブルを達成できます。

SELECT
  t.Student,
  t.Subject,
  t.Score
FROM Table1 AS t
  JOIN 
    (
        SELECT Student, Score FROM Table1 GROUP BY Student, Score HAVING COUNT(*) > 1
    ) AS t1 ON t.Student = t1.Student AND t.Score = t1.Score

テストデータと作成されたテーブルの完全な例は、次の場所にあります。

http://sqlfiddle.com/#!2/61f02/8

于 2013-03-22T12:58:37.617 に答える