A牛哥哥 2013-08-07 13:13
浏览 255
已采纳

帮我想想查询sql怎么写,数据库是mysql

需求是取每个人的前两个最高分(例如A就是80和70)之差, 有的人可能只有一条记录(例如C), 只有一条记录的差设为0
+----+------+------+
| id | name | score|
+----+------+------+
| 1 | A | 50 |
| 2 | A | 80 |
| 3 | A | 70 |
| 4 | B | 80 |
| 5 | B | 85 |
| 6 | C | 90 |
+----+------+------+

我想按name分组, score降序, 给每组内的记录标序号(如下表), 这样获得前两个最高分, 可是不知道怎么标号? 除了标号还有别的思路没

+------+------+------+
| name | score|序号 |
+------+------+------+
| A | 80 | 1 |
| A | 70 | 2 |
| A | 50 | 3 |
| B | 85 | 1 |
| B | 80 | 2 |
| C | 90 | 1 |
+------+------+------+

  • 写回答

2条回答 默认 最新

  • zyn010101 2013-08-07 13:49
    关注

    select a.name,if(c.name is null,0,(a.score-c.score)) from (select max(score) score,name from chengji group by name) a left join (select max(b.score) score,b.name from (select max(score) score,name from chengji group by name ) a right join chengji b on b.name=a.name and b.score =a.score where a.name is null group by b.name ) c on c.name =b.name

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助