Mysql选择组合

时间:2016-12-05 01:00:02

标签: mysql sql

您好,我有一个包含许多行的大表。

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

2 个答案:

答案 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;