【问题标题】:MySQL Order By does not work for all recordsMySQL Order By 不适用于所有记录
【发布时间】:2012-09-06 22:19:20
【问题描述】:

我运行此查询,需要按状态字段对结果进行排序。

SELECT status
FROM myusers
WHERE status IN (7,8,35)  
ORDER BY status DESC

我得到回应:

8
7
7
7
35

为什么当我使用IN (7,8,35)时它没有正确排序

【问题讨论】:

  • 在下面查看我的答案以获得我的解决方案:)

标签: mysql sql sorting sql-order-by


【解决方案1】:

这是因为您当前的列是以string 格式存储为VARCHAR。将其转换为整数以获得正确的结果。

SELECT status
FROM myusers
WHERE status IN (7,8,35)  
ORDER BY CAST(status AS SIGNED) DESC

或者另一种方法是将status 列的当前数据类型更改为INT

SQLFiddle Demo

【讨论】:

    【解决方案2】:

    您的status 字段应该是一个数字字段才能正确排序。当前的顺序显然是按字母顺序排列的。

    【讨论】:

    • 哇,你说得对。我没有注意到它是 varchar。但是,虽然我不明白你是怎么看的,但它是如何清晰地按字母顺序排列的?
    • 字母表示它不会按数字排序。但是一个字符一个字符。 3 在 7 之前,所以它被认为是一个较小的值。
    【解决方案3】:

    您的状态栏可能是VARCHAR,将其转换为INT 栏,它应该可以工作。

    【讨论】:

      【解决方案4】:

      我想你的“状态”是 VARCHAR 类型的,所以排序顺序是正确的。 您按降序排序,因此“8”(按字典顺序)大于“7”,“7”大于“35”。

      对于数字排序,将状态字段的数据类型更改为数字。

      对于订单 (7,8,35),您应该使用 ORDER BY status ASC ;-)

      【讨论】:

        猜你喜欢
        • 2012-06-03
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-01
        • 1970-01-01
        相关资源
        最近更新 更多