您好,我有一个包含许多行的大表。
ID / NAME / CNT
6 / yassine / 2
5 / yassine / 9
4 / yassine / 10
3 / yassine / 12
2 / yassine / 8
1 / yassine / 3
我想要的是通过desc选择前4个ID顺序为6/5/4/3然后在它们显示顺序后第一个两个按ID,其余按cnt显示顺序输出是这样的:6/5/3/4。 我试过的是
(通过id desc limit 2从表顺序中选择*)union(select * from (通过id desc limit 4从表顺序中选择*)cnt desc命令
但它似乎不起作用。任何人都可以帮忙吗? 更新1:输出
ID / NAME / CNT
6 / yassine / 2
5 / yassine / 9
3 / yassine / 12
4 / yassine / 10
答案 0 :(得分:2)
使用union
组合一个基于id选择前2个记录的查询,并将计算字段添加为1,另一个查询通过id添加计算字段拉出3-4条记录。添加整体order by子句,它使用基于计算字段值的条件语句进行排序。
(select id, cnt, 1 as srt from yourtable order by id desc limit 2)
union
(select id, cnt, 0 as srt from yourtable order by id desc limit 2, 2)
order by srt desc, if(srt=1, id, cnt) desc
答案 1 :(得分:0)
我认为你应该用子查询做到这一点:
select t.*
from (select t.*, (@rn := @rn + 1) as rn
from t cross join
(select @rn := 0) params
order by id desc
limit 4
) t
order by (case when rn <= 2 then id 1 else 2 end),
(case when rn <= 2 then id end),
cnt;