我需要以某种方式从这样的表中选择
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
答案 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;