mysql - SQL:按Column2降序选行,Column1不为NULL时只显示1条结果

标签 mysql sql

我有一张 table :

Id -- Column1 -- Column2 -- ....

我想按 Column2 降序选择所有行,其中 Id = 1234 且 Column1 为 NULL:

SELECT * 
FROM my_table 
WHERE Id = 1234 AND Column1 is NULL 
ORDER BY column2 DESC 

加上

Column2 中 Id = 1234 且 Column1 不为 NULL 的具有最大值的 1 行:

SELECT * 
FROM my_table 
WHERE Id = 1234 AND Column1 is NOT NULL 
ORDER BY column2 DESC 
LIMIT 1

如何将这两个 SQL 查询合并为一个?

最佳答案

如果你使用UNION ALL语句你可以合并两个不同的查询结果。

UNION 语句中的

ALL 选项不会删除重复的行。这是因为您也会在第一个查询中获得 column2 的最大值。

试试这个:

SELECT t.* FROM 
(SELECT id, column1, column2 
FROM my_table 
WHERE Id = 1234 AND Column1 is NULL 
UNION ALL
(SELECT id, column1, column2 
FROM my_table 
WHERE Id = 1234 AND Column1 is NOT NULL 
ORDER BY column2 DESC 
LIMIT 1)) as t
ORDER BY t.column2 DESC 

Sql Fiddle

关于mysql - SQL:按Column2降序选行,Column1不为NULL时只显示1条结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41050754/

相关文章:

mysql - MYSQL 中的计数乘以行并按日期和 ID 进行过滤

java - jOOQ - 方法调用

mysql - 从数据文件恢复 MySQL 数据库(Windows 到 Unix)

php - 金额的理想支付网关问题

php - 如何将 laravel orm 更改为我的查询

php - 查询期间之间的日期

mysql - 在 mysql 查询中使用 if 语句

sql - 如何检查SQL中的列中是否存在特定字符串? (例如 : need to find 'ice' only but not 'service' )

sql - 在 SQL Server 中使用动态名称访问另一个数据库

c# - 如何从 ASP.NET 向导中的动态输入和步骤中收集值