我在星期五问了this question,从那时起,我一直在尝试我能想到的一切,但都没有成功

我无法使它正常工作

SELECT * FROM WorldFlowers_table GROUP BY device_id ORDER BY score DESC LIMIT 100


并返回我:


前100名得分最高的100行
过滤,以便仅显示每个device_id的最高分
按分数排序


@ 1000111和Giorgos Betsos

一个人走进一个房间,说:“请帮助,我疯狂地尝试着我的所有力量来解决一个简单的问题,任何人都可以在眨眼之间解决”

2个家伙转身,朝那个家伙射击,然后说“重复”

我累了:(

/////////
处理草莓评论

我尝试在SQLFiddle中构建它

CREATE TABLE WorldFlowers_table
    (
     id int identity primary key,
     timestamp varchar(20),
     name varchar(30),
     score int,
     color varchar(30),
     flower varchar(30),
     device_id varchar(30),
    );

INSERT INTO WorldFlowers_table
(timestamp, name,score, color, flower, device_id  )
VALUES
('1475151826', 'RI-RI', 42, '0|0|0|0|0|0|0|0|0|0', '[1475152768|42|4|0.0]', 'XYZ' ),
('1475151826', 'RO-RO', 46, '0|0|0|0|0|0|0|0|0|0', '[1475152768|42|4|0.0]', 'ABC' ),
('1475151826', 'RI-RI', 42, '0|0|0|0|0|0|0|0|0|0', '[1475152768|42|4|0.0]', 'XYZ' ),
('1475151826', 'RA-RA', 45, '0|0|0|0|0|0|0|0|0|0', '[1475152768|42|4|0.0]', 'ABC' ),
('1475151826', 'RU-RU', 42, '0|0|0|0|0|0|0|0|0|0', '[1475152768|42|4|0.0]', 'XYZ' ),
('1475151826', 'RE-RE', 44, '0|0|0|0|0|0|0|0|0|0', '[1475152768|42|4|0.0]', 'DEF' ),
('1475151826', 'RY-RY', 42, '0|0|0|0|0|0|0|0|0|0', '[1475152768|42|4|0.0]', 'XYZ' ),
('1475151826', 'RX-RX', 43, '0|0|0|0|0|0|0|0|0|0', '[1475152768|42|4|0.0]', 'XYZ' ),
('1475151826', 'RA-RA', 42, '0|0|0|0|0|0|0|0|0|0', '[1475152768|42|4|0.0]', 'DEF' );


但确实只在2中建立1次。

我正在寻找的回报将是

+------+------------+--------------------------------------------+
| id   | timestamp  | name  | score | color | flower | device_id |
+------+------------+--------------------------------------------+
| 2    | blabla     | RO-RO |  46   |  ...  |   ...  |   ABC     |
| 5    | blabla     | RE-RE |  44   |  ...  |   ...  |   DEF     |
| 7    | blabla     | RX-RX |  43   |  ...  |   ...  |   XYZ     |
+------+-------+-------------------------------------------------+


。每个返回的每个设备ID仅1个

。每个设备ID得分最高

。结果在ORDER BY分数DESC中给出

更新:这来自scaisEdge似乎工作正常

选择*从分数
  WHERE(名称,分数)IN(选择名称,MAX(分数)
                                  从分数
                                  按名称分组
                                  按分数排序
                                )
  按分数排序
  极限100;

最佳答案

如果我理解正确,您希望获得设备得分最高的100位

  SELECT *
  FROM WorldFlowers_table
  WHERE (device_id, score) IN (SELECT device_id, max(score)
                               FROM WorldFlowers_table
                               GROUP BY device_id )
  ORDER BY score DESC
  LIMIT 100

关于mysql - mySQL“获得前100名分数”查询让我发疯,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39833606/

10-15 19:00