【问题标题】:How to get data in a column in order by using SQL in operator如何使用 SQL in 运算符按顺序获取列中的数据
【发布时间】:2018-06-06 02:44:55
【问题描述】:

有一个数据集如下图;

例如,当 event_type 的输入为 4、1、2、3 时,我想按此顺序从 cnt_stamp 获取 3、999、3、9。我创建了如下所示的 SQL 代码,但无论输入的顺序如何,它似乎总是返回 999、3、9、3。 如何修复 SQL 以实现此目的?感谢您抽出宝贵时间,如果您有任何问题,请告诉我。

SELECT `cnt_stamp` FROM `stm_events` WHERE `event_type` in (4,1,2,3)

【问题讨论】:

  • 虽然这样做很奇怪,但您可以在 SELECT * FROM stm_events WHERE event_type = 4 UNION ALL SELECT * FROM stm_events WHERE event_type = 1 UNION ALL SELECT * FROM stm_events WHERE event_type = 2 中使用 UNION UNION ALL SELECT * FROM stm_events WHERE event_type = 3 - 但是这看起来很糟糕。
  • @NoChance 这可能是实现它的唯一方法......
  • 我上面的 SELECT 有点冒险,因为它取决于 SELECT 语句的顺序。此外,也不能保证 db 在呈现结果时一定会遵循 SELECT 语句的顺序。保证结果顺序的唯一方法是使用 SORT BY,因此上述解决方案可能有效,但不能保证始终有效。

标签: sql select where in-operator


【解决方案1】:

在您的查询中添加 ORDER BY FIELD(event_type, 4, 1, 2, 3)。它应该看起来像:

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

【讨论】:

    【解决方案2】:

    它不能,因为默认情况下数据按升序排序,如果你想要你想要的结果,最好创建 1 列用于索引

    【讨论】:

    • 感谢您的建议,但我想在不添加新列的情况下实现这一目标...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多