SQL ORDER BY 多个字段与子订单
SQL ORDER BY multiple fields with sub orders
我正在尝试查询以获取按定义的类型、性别和姓名排序的学生 class 的列表。
我有下一个问题:
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
您始终可以使用 CASE
语句来创建您想要的表达式
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
我正在尝试查询以获取按定义的类型、性别和姓名排序的学生 class 的列表。
我有下一个问题:
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
您始终可以使用 CASE
语句来创建您想要的表达式
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