我的 sql 语句末尾有这个排序 sql:
ORDER BY CASE WHEN LOWER(LEFT(E.name, 1)) BETWEEN 'a' AND 'z'
THEN 0 ELSE 1 END, E.name ASC
以这种方式对结果进行排序:名称首先以字母开头,然后是数字。
我如何添加这个:首先,将首选项设置为 true 的名称,然后是我已经拥有的所有名称。即:E.preference='true' 将位于顶部。
最佳答案
您不能在现有排序之前添加偏好排序吗?
ORDER BY Case When e.Preference = 'true' then 0 else 1 end,
CASE WHEN LOWER(LEFT(E.name, 1)) BETWEEN \'a\' AND \'z\' THEN 0 ELSE 1 END, E.name ASC
编辑
或者,如果您想以任意顺序首先获得所有preference = true
,然后使用现有方法进行排序,那么我认为您可以使用:
Order By Case When e.Preference = 'true' Then 0
Else
CASE
WHEN LOWER(LEFT(E.name, 1)) BETWEEN \'a\' AND \'z\' THEN 1
ELSE 2 END
End, e.name asc
编辑2
更进一步,您可以先获得所有 preference = true
,然后使用当前方法对它们进行排序,然后对所有 preference=false
进行排序
Order By Case When e.Preference = 'true' Then
CASE
WHEN LOWER(LEFT(E.name, 1)) BETWEEN \'a\' AND \'z\' THEN 0
ELSE 1 END
Else
CASE
WHEN LOWER(LEFT(E.name, 1)) BETWEEN \'a\' AND \'z\' THEN 2
ELSE 3 END
End, e.name asc
但我不确定这会如何影响查询的性能。
关于sql - 快速 SQL 排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4957888/