Mysql按分数列出一组行

时间:2015-01-28 17:57:46

标签: php mysql sql

我正在寻找MySQL语句来实现它..有什么帮助吗?

INSERT INTO exam    (`id`, `Names`, `Score`)
VALUES
    (1, 'Ahmed', 55), (2, 'Jacob', 90),(3, 'Rose', 55),
    (4, 'Habib', 90), (5, 'Suhaib', 70), (6, 'Sahil', 70),
    (7, 'Gawai', 55), (8, 'John', 55),(9, 'Pawel', 55),
    (10, 'Bannaga', 70) ;

我想要的结果如下:

   Who Scored 90 :
   +-------------------+
   | Sl   |   id   |   names |
   +----+----+---------+
    |  1.   |    2   |   Jacob
   +----+----+---------
    |  2   |   4    |  Habib
   +----+----+---------

类似于70和55分......

1 个答案:

答案 0 :(得分:3)

您可以使用SELECT的简单ORDER BY查询:

SELECT id,Name,Score
FROM exam
ORDER BY Score DESC

请参阅SQL Fiddle中的结果。

更好的解决方案:

SELECT Score,GROUP_CONCAT(id) as ids, GROUP_CONCAT(Names) as Names
FROM exam
GROUP BY Score
ORDER BY Score DESC

结果如下:

SCORE   IDS         NAMES
90      2,4         Jacob,Habib
70      10,6,5      Bannaga,Sahil,Suhaib
55      3,7,8,9,1   Rose,Gawai,John,Pawel,Ahmed

查看SQL Fiddle中的结果。

修改

对于更新的问题,您可以这样做:

SET @row_number:=0;
SELECT @row_number:=@row_number+1 AS Sl_No,id,Names,Score 
FROM exam
ORDER BY Score DESC, id ASC;

结果:

SL_NO   ID  NAMES   SCORE
1       2   Jacob   90
2       4   Habib   90
3       10  Bannaga 70
4       6   Sahil   70
5       5   Suhaib  70
6       3   Rose    55
7       7   Gawai   55
8       8   John    55
9       9   Pawel   55
10      1   Ahmed   55

请参阅SQL Fiddle中的结果。