Mysql 以交替方式选择好的和坏的额定值

Mysql 以交替方式选择好的和坏的额定值,mysql,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进行排序 本质上,目

我需要从这样的表格中进行选择

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
进行排序

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

在过去的几天里,我一直在为这件事操劳,我的大脑根本无法处理它

编辑:
我已经按要求编辑了这个问题,

获取数据的奇怪方式。您可以在其他数据库中使用
row\u 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;

我认为ORDER BY中的表达式不符合规范。我会使用类似这样的方法:
orderbyif(r.rnother,这正是我用来模拟
ROW\u NUMBER
分析函数(在MySQL中不可用)的方法。我认为该规范还要求在内联视图的orderby中添加
id
,作为第二个表达式(
r
).我已将您的答案组合在一起,并对
NULL
提出了一个例外: