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
提出了一个例外: