2

学生のテーブルから上位 5 のスコアを取得しようとしています。テーブルはそのように見えます。

   table: student

   id name   score

   1    a     100
   2    b     100
   3    c     90
   4    d     87
   5    e     85
   6    f     88
   7    g     83
   9    h     92

私が行った場合

   select name,score from student order by score desc limit 5

   a    100
   b    100
   h     92
   c     90
   f     88

しかし、私はこの結果を見たい

   a    100
   b    100
   h     92
   c     90
   f     88
   d     87

重複したスコアをカウント 1 として把握しようとしています。解決策はありますか? 前もって感謝します。

4

4 に答える 4

3
SELECT s.*
FROM student AS s
  JOIN
    ( SELECT DISTINCT score
      FROM student
      ORDER BY score DESC
          LIMIT 5
    ) AS lim
    ON s.score = lim.score 
ORDER BY s.score DESC ;
于 2013-02-20T16:35:43.243 に答える
2

1 つの方法を次に示します。

select s.*
from student s
where s.score >= (select score
                  from (select distinct score from student order by score desc limit 5) s
                  order by score
                  limit 1
                 )

これにより、最も内側のサブクエリで降順でスコアが取得されます。これを 5 つの異なるスコアに制限します。次に、最小値を見つけて、このスコア以上のすべての行を返します。

于 2013-02-20T16:34:53.003 に答える
1

使ってみてくださいGROUP BY:

SELECT 
    score
    COUNT(*) AS score_count
FROM 
    student 
GROUP BY
    score
ORDER BY
    score desc 
LIMIT 5
于 2013-02-20T16:23:39.813 に答える
0

ここにSQLフィドルがあります

  SELECT s.id, s.name,s.score FROM tbl_student AS s INNER JOIN (SELECT * FROM tbl_student ORDER BY score DESC LIMIT 0,5) AS s2 ON s2.id=s.id order by s.score desc
于 2013-02-21T19:17:35.170 に答える