【问题标题】:SQL ORDER BY multiple fields with sub ordersSQL ORDER BY 带有子订单的多个字段
【发布时间】:2018-05-13 04:57:32
【问题描述】:

我正在尝试查询以获取按定义的类型、性别和姓名排序的学生班级列表。

我有下一个问题:

SELECT * FROM STUDENTS
  ORDER BY FIELD(type, 'b', 'p', 'j', 'i', 'a', 'c', 'v'), FIELD(sex, 'M', 'F'), `name` ASC

我得到了这个顺序,第一个类型,然后是那个类型和名称中的两个性别,但是我需要一起定义一些类型和性别,如下所示:

type = 'b', sex = 'M', name
type = 'b', sex = 'F', name
type = 'p', sex = 'M', name
type = 'p', sex = 'F', name
type = 'i', sex = 'M', name
type = 'a', sex = 'M', name
type = 'c', sex = 'M', name
type = 'v', sex = 'M', name
type = 'j', sex = 'M', name
type = 'i', sex = 'F', name
type = 'a', sex = 'F', name
type = 'c', sex = 'F', name
type = 'v', sex = 'F', name
type = 'j', sex = 'F', name

【问题讨论】:

  • 什么是性H
  • 有类型和性别的栏目吗?
  • @JuanCarlosOropeza 只是一个错误,它是“F”

标签: mysql sql doctrine-orm dbal


【解决方案1】:

您始终可以使用CASE 语句来创建您想要的表达式

SQL DEMO

SELECT *
FROM Table1
ORDER BY CASE WHEN type = 'b' and sex = 'M' THEN 1
              WHEN type = 'b' and sex = 'F' THEN 2
              WHEN type = 'p' and sex = 'M' THEN 3
              WHEN type = 'p' and sex = 'F' THEN 4
              ....
              ELSE 9999
          END,
          name

【讨论】:

  • 这个案例是按名字排序的,不关心类型和性别。
  • 不行,这个case先给{type, sex}组合再给name,你试过了吗?
  • 是的,但没用。它只按名称排序,不关心类型和性别。
  • 因为您没有填写所有案例。这就是... 的意图,如果不匹配任何CASE 默认返回NULL 并且空值首先出现。但是您可以通过添加ELSE 条件来解决它。
猜你喜欢
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
相关资源
最近更新 更多