代码之家  ›  专栏  ›  技术社区  ›  vulkanino

从单个表中对所选内容进行双重排序

  •  2
  • vulkanino  · 技术社区  · 14 年前

    我有一个表,其中ID作为主键,描述作为另一个字段。

    我要先选择ID为<=4、按描述排序的记录,然后选择所有其他记录(ID>4)、按描述排序的记录。到不了那里!

    5 回复  |  直到 14 年前
        1
  •  1
  •   Community CDub    7 年前

    您可能需要使用 id <= 4 你的表情 ORDER BY 条款:

    SELECT * FROM your_table ORDER BY id <= 4 DESC, description;
    

    测试用例(使用mysql):

    CREATE TABLE your_table (id int, description varchar(50));
    
    INSERT INTO your_table VALUES (1, 'c');
    INSERT INTO your_table VALUES (2, 'a');
    INSERT INTO your_table VALUES (3, 'z');
    INSERT INTO your_table VALUES (4, 'b');
    INSERT INTO your_table VALUES (5, 'g');
    INSERT INTO your_table VALUES (6, 'o');
    INSERT INTO your_table VALUES (7, 'c');
    INSERT INTO your_table VALUES (8, 'p');
    

    结果:

    +------+-------------+
    | id   | description |
    +------+-------------+
    |    2 | a           |
    |    4 | b           |
    |    1 | c           |
    |    3 | z           |
    |    7 | c           |
    |    5 | g           |
    |    6 | o           |
    |    8 | p           |
    +------+-------------+
    8 rows in set (0.00 sec)
    

    相关职位:

        2
  •  4
  •   GSerg    14 年前
    select id, descr
    from t
    order by 
     case when id <= 4 then 0 else 1 end, 
     descr
    
        3
  •  2
  •   Scott Saunders    14 年前
    select *, id<=4 as low from table order by low, description
    
        4
  •  1
  •   D'Arcy Rittich    14 年前
    select id, description
    from MyTable
    order by case when id <= 4 then 0 else 1 end, description
    
        5
  •  1
  •   a1ex07    14 年前

    你可以使用 UNION

    SELECT * FROM (SELECT * FROM table1 WHERE id <=4 ORDER by description)aaa
    UNION
    SELECT * FROM (SELECT * FROM table1 WHERE id >4 ORDER by description)bbb
    

    SELECT * FROM table1
    ORDER BY
    CASE WHEN id <=4 THEN 0
    ELSE 1
    END, description