以交替的方式选择好的和坏的评级

时间:2014-07-07 18:47:10

标签: mysql

我需要以某种方式从这样的表中选择

CREATE TABLE reviews (
id INT AUTO_INCREMENT PRIMARY KEY,
score INT
);
INSERT INTO reviews (score) VALUES 
(3),
(4),
(10),
(7),
(9),
(9),
(5),
(2),
(2),
(3);

有些评论得分较高,其他评论得分较低 我想按此顺序选择它们

  • 第一名最佳成绩
  • 第二个最差得分
  • 第三名最佳成绩
  • 第四个最差得分

如果得分为平局,那么id应该用于订购

本质上,目标是显示好的和坏的并排,如果查询变得过于复杂,那么仅仅选择最好的和最差的一个就足够了,它就像选择所有这些,然后用服务器端语言对其进行排序,但必须限制选择。

过去几天我一直都是这样做的,我的大脑根本无法处理它

编辑: 我已根据要求编辑了问题here is the sqlfiddle

1 个答案:

答案 0 :(得分:1)

获取数据的奇怪方式。您可以使用row_number()在其他数据库中更轻松地执行此操作。您还可以使用变量在MySQL中执行解决方案。首先按行枚举:

select r.*,
       (@rn := @rn + 1) as rn
from reviews r cross join
     (select @rn := 0) vars
order by r.score;

运行后,变量@rn将具有行数。我认为你可以通过以下方式做你想做的事情:

select r.*
from (select r.*,
             (@rn := @rn + 1) as rn
      from reviews r cross join
           (select @rn := 0) vars
      order by r.score
     ) r
order by abs(2*rn - @rn), rn;