SQL布尔字段排序问题
在一个查询中返回的是多列, 我想让其中布尔字段 isReady 的值为 true 的那些先返回, 再返回值为空的那些, 最后返回值为 false 的那些, 请问这种 order by 该怎么写?
基于Monster 组和GPT的调写:
用 CASE 表达式在 ORDER BY 子句中对布尔字段进行排序。具体来说,你可以按以下方式编写查询:
SELECT column1, column2, isReady
FROM your_table
ORDER BY
CASE
WHEN isReady = true THEN 0
WHEN isReady IS NULL THEN 1
ELSE 2
END
这个查询会先对 isReady 为 true 的记录进行排序,然后是值为空的记录,最后是值为 false 的记录。
CASE 表达式将 isReady 列值映射到 0, 1, 或 2,以使布尔字段正确排序。
请注意,如果你使用的是 PostgreSQL 数据库,则可以使用 NULLS FIRST 或 NULLS LAST 关键字指定空值应该在排序中出现的位置。
SELECT column1, column2, isReady
FROM your_table
ORDER BY
CASE
WHEN isReady = true THEN 0
ELSE 2
END NULLS LAST
这将首先对 isReady 为 true 的记录进行排序,然后对空值进行排序,并将它们放在最后,最后是值为 false 的记录。
您可以使用 CASE 表达式将 isReady 字段的值映射为整数,并在 ORDER BY 子句中使用这个整数值进行排序。具体来说,您可以将 isReady 为 true 的行映射为 1,为 false 的行映射为 0,为 NULL 的行映射为 -1(或其他您认为适合的整数值),然后将整数值升序排序。这样,所有 isReady 为 true 的行将排在 isReady 为 NULL 的行之前,所有 isReady 为 NULL 的行将排在 isReady 为 false 的行之前。下面是一个示例查询:
SELECT column1, column2, isReady
FROM myTable
ORDER BY
CASE
WHEN isReady = true THEN 1
WHEN isReady IS NULL THEN -1
ELSE 0
END ASC
在这个查询中,isReady 为 true 的行将排在最前面,其次是 isReady 为 NULL 的行,最后是 isReady 为 false 的行。您可以根据需要修改 CASE 表达式中的整数值来实现所需的排序顺序。
您可以使用CASE语句对isReady布尔字段进行分类,然后按照分类后的结果进行排序,示例SQL语句如下:
SELECT column1, column2, isReady
FROM table_name
ORDER BY CASE
WHEN isReady = 'true' THEN 1
WHEN isReady IS NULL THEN 2
WHEN isReady = 'false' THEN 3
ELSE 4
END;
这个查询会将isReady为true的行排在最前面,其次是isReady值为空的行,最后是isReady为false的行。如果isReady的值不是true、false或null,则会排在最后面。
在这个查询中,我们使用了一个CASE语句来创建一个分类,该分类按照isReady的值进行排序。当isReady为true时,分类值为1,这意味着这些行将排在最前面。当isReady为空时,分类值为2,这些行将排在isReady为true的行之后。当isReady为false时,分类值为3,这些行将排在最后面。最后,如果isReady的值不是true、false或null,则分类值为4,这些行将排在最后面。