我想写一个查询,它将根据多个条件对结果进行排序.
请参考下表
name | domain |
---|---|
Apple | gmail |
.Apple2 | yahoo |
_Apple3 | xyz |
Apple4 | zyx |
Ball | abc |
.Ball2 | efg |
_Ball3 | gmail |
Ball4 | yahoo |
Bear | xyz |
Cat | abc |
我想在表上方排序
1-由已知域yahoo
后跟gmail
,然后是rest.
所以我想把结果行分成三部分.
第一节中的行具有yahoo
个域,然后在第二节中的行具有gmail
个域,位于最后剩余的行.
2-按字母顺序排列,所有特殊字符位于末尾.
每个部分应按照字母顺序在name
个字段上进一步排序,并在末尾使用特殊字符.
结果应如下表所示.
name | domain |
---|---|
Ball4 | yahoo |
.Apple2 | yahoo |
Apple | gmail |
_Ball3 | gmail |
Apple4 | zyx |
Ball | abc |
Bear | xyz |
Cat | abc |
_Apple3 | xyz |
.Ball2 | efg |
我已经用下面的查询按字母顺序对结果进行排序,底部有特殊符号,但我无法获得正确排序的第一部分,即按已知域排序.
SELECT * FROM table1
ORDER BY
CASE WHEN name GLOB '[A-Za-z]*'
THEN name
ELSE '~' || name
END COLLATE NOCASE