我想写一个查询,它将根据多个条件对结果进行排序.

请参考下表

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

推荐答案

ORDER BY子句中使用布尔表达式:

SELECT * FROM table1
ORDER BY domain = 'yahoo' DESC,
         domain = 'gmail' DESC,
         name GLOB '[A-Za-z]*' DESC,
         LTRIM(LTRIM(name, '.'), '_');

Each of these boolean expressions evaluates to 1 for true or 0 for false.

See the demo.

Java相关问答推荐

卡夫卡流列表Serdes:总是空的

如何在Spring Boot中创建500错误的响应正文?

如何用javac编译Java类,即使对像java.lang.*这样的基本类也没有任何依赖关系?

Listview—在Android Java中正确链接项目时出错

在现代操作系统/硬件上按块访问数据值得吗?

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

Java中如何根据Font.canDisplay方法对字符串进行分段

将不受支持的时区UT重写为UTC是否节省?

为什么我的在一个范围内寻找素数的程序不能像S所期望的那样工作

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

暂停计时器

无法了解Java线程所消耗的时间

如何获取Instant#of EpochSecond(?)的最大值

Java Telnet客户端重复的IAC符号

JNI:将代码打包成自包含的二进制文件

如何创建模块信息类文件并将其添加到JAR中?

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

在Java Spring JPA中插入包含对其他实体的引用的列

使用@ExceptionHandler的GlobalExceptionHandler还是来自服务器的REST应答的ResponseEntity?

使用Java线程进行并行编程