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

如何使用“order by field”对sql结果进行排序

  •  0
  • Tak  · 技术社区  · 6 年前

    如果有如下所示的数据;

    id  cnt_stamp    
    1  999 
    2  3
    3  9
    4  3 
    5  1000
    6  30
    

    如果按这个顺序输入是(4,1,2,3),我只想得到(3999,3,9)。 为了实现这一点,我创建了一个sql

    SELECT `cnt_stamp`
    FROM `stm_events`
    ORDER BY FIELD(`id`, 4, 1, 2, 3);
    

    但是它返回(1000,30,3999,3,9)。我应该如何修改sql来实现我的目标?谢谢你抽出时间。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Tim Biegeleisen    6 年前

    FIELD 将分配 NULL 任何不匹配 id ,在mysql中默认情况下,nulls首先排序。如果您根本不想看到不匹配的项,可以添加 WHERE 条款:

    SELECT cnt_stamp
    FROM stm_events
    WHERE id IN (1, 2, 3, 4)
    ORDER BY FIELD(id, 4, 1, 2, 3);
    

    如果要查看所有数据,不匹配 身份证件 结束时的值,然后反转字段列表的顺序并按降序排序:

    SELECT cnt_stamp
    FROM stm_events
    ORDER BY FIELD(id, 3, 2, 1, 4) DESC;
    

    Demo

        2
  •  1
  •   Barbaros Özhan    6 年前

    使用 COALESCE 功能:

    SELECT `cnt_stamp` 
      FROM `stm_events` 
     ORDER BY COALESCE(`id`,FIELD(`id`,4,1,2,3));
    

    SQL Fiddle Demo