0

私は単純なテーブルを持っています:

ID    Score
1     90
2     85
3     96
4     96
5     73

トップスコアラーを取得したいので、max 関数を使用しました。

select max(s.score) as score,
    s.id
from student_score as s

結果:

score    id
96       1

問題は、トップ スコアラーが 2 人いることです。どうすればすべてのトップ スコアラーを取得できますか?

4

4 に答える 4

5

サブクエリは、結果が句student_scoreの比較に使用されるテーブルから最大スコアを取得します。WHERE

SELECT a.*
FROM student_score a
WHERE Score = 
(
    SELECT MAX(Score)
    FROM student_score
)
于 2012-10-30T08:22:35.277 に答える
3
select s.score, s.id
from student_score as s
where
    s.score in 
    (
        select max(t.score)
        from student_score as t
    )

サブクエリを再利用可能にしたい場合は、これを試してください

select s.score, s.id, m.score
from student_score as s
    cross join (select max(t.score) as score from student_score as t) as m
where s.score = m.score

SQL フィドルの例

于 2012-10-30T08:21:59.287 に答える
2

これを試して:

クエリをサブクエリとして使用して、実際のテーブルからスコアを選択します

select * 
from  student_score 
where score in
 (
    select max(score)
    from   student_score )


SQL フィドルのデモ

于 2012-10-30T08:22:33.970 に答える
1

Max は集計関数であり、1 行のみを返します。最も簡単なのは、サブクエリを発行することです。

SELECT * FROM student_score
WHERE score = (
    SELECT MAX(score) FROM student_score
)

行数が多い場合は、スコアにインデックスがあることを確認してください。

于 2012-10-30T08:22:21.593 に答える