MySQL 按 or 子句中的两列排序
MySQL order by two columns in or-clause
我在 MySQL 中有一个 table,其中包含如下数据:
id name first_name
===============================
1 hello
2 many
3 alive
4 persons
如何让结果看起来像这样
id name first_name
===============================
3 alive
1 hello
2 many
4 persons
因此,名称应该按字母顺序排序 and/or first_name?
下面的查询就可以完成这项工作。
SELECT *
FROM nameTable
ORDER BY IFNULL(name,first_name)
或
SELECT *
FROM nameTable
ORDER BY coalesce(name,first_name)
N:B: 如果无法访问 SQL FIDDLE.
CREATE TABLE `nameTable` (
`ID` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL ,
`first_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`ID`)
);
INSERT INTO `nametable` VALUES ('1', 'hello', null);
INSERT INTO `nametable` VALUES ('2', null, 'many');
INSERT INTO `nametable` VALUES ('3', null, 'alive');
INSERT INTO `nametable` VALUES ('4', 'persons', null);
注:
两者之间的主要区别是 IFNULL
函数有两个参数,returns 第一个参数如果不是 NULL
或第二个参数如果第一个参数是 NULL
.
COALESCE
函数可以接受两个或更多参数和 returns 第一个非 NULL
参数,如果所有参数都是 null
.[=20= 则为 NULL ]
我找到了解决方案,顺序应该是这样的
order by coalesce(name,first_name)
创建一个 sortby 列,它是其他两个列的串联。
SELECT id, `name`, first_name, CONCAT(IFNULL(`name`,''),IFNULL(first_name,'')) AS sortby
FROM
table1
ORDER BY sortby
使用这个
SELECT * FROM A ORDER BY CONCAT(name,first_name) ASC
我在 MySQL 中有一个 table,其中包含如下数据:
id name first_name
===============================
1 hello
2 many
3 alive
4 persons
如何让结果看起来像这样
id name first_name
===============================
3 alive
1 hello
2 many
4 persons
因此,名称应该按字母顺序排序 and/or first_name?
下面的查询就可以完成这项工作。
SELECT *
FROM nameTable
ORDER BY IFNULL(name,first_name)
或
SELECT *
FROM nameTable
ORDER BY coalesce(name,first_name)
N:B: 如果无法访问 SQL FIDDLE.
CREATE TABLE `nameTable` (
`ID` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL ,
`first_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`ID`)
);
INSERT INTO `nametable` VALUES ('1', 'hello', null);
INSERT INTO `nametable` VALUES ('2', null, 'many');
INSERT INTO `nametable` VALUES ('3', null, 'alive');
INSERT INTO `nametable` VALUES ('4', 'persons', null);
注:
两者之间的主要区别是 IFNULL
函数有两个参数,returns 第一个参数如果不是 NULL
或第二个参数如果第一个参数是 NULL
.
COALESCE
函数可以接受两个或更多参数和 returns 第一个非 NULL
参数,如果所有参数都是 null
.[=20= 则为 NULL ]
我找到了解决方案,顺序应该是这样的
order by coalesce(name,first_name)
创建一个 sortby 列,它是其他两个列的串联。
SELECT id, `name`, first_name, CONCAT(IFNULL(`name`,''),IFNULL(first_name,'')) AS sortby
FROM
table1
ORDER BY sortby
使用这个
SELECT * FROM A ORDER BY CONCAT(name,first_name) ASC