mysql order by MIN() where NOT NULL

标签 mysql case where-clause min

我的选择有点长,我在其中加入了很多表。我需要做什么:我正在选择最低价格

SELECT MIN(accomodation_price.price) AS price_from

一切都很好,直到我想按 price_from 订购结果。好的,我知道我不能使用 ORDER BY price_from 所以我尝试使用 ORDER BY MIN(accomodation_price.price) 但我想在 CASE 中使用它。我的选择效果很好,但它适用于第一个结果,它对 MIN(accomodation_price.price) 没有任何值(value)...首先我想要具有某些值(value)的结果,然后是其他...

这是我的代码,带有 MIN.... 的行不起作用,我不知道为什么。我也尝试使用 WHERE IS NOT NULL 但相同....

ORDER BY

            CASE 

                WHEN accomodation.valid_to>=NOW() AND accomodation.valid_from<=NOW() THEN 0
                WHEN NOW()>accomodation.valid_to AND accomodation.valid_to!='0000-00-00' THEN 1 
                WHEN MIN(accomodation_price.price) > '0' THEN 2
                ELSE 3 END";

最佳答案

您应该做的是在结果数据集中包含该字段(连同 CASE),用另一个 select 将其包装,然后按该字段排序。像这样的东西:

select * from
(select field1,field2,...,
(CASE 
WHEN accomodation.valid_to>=NOW() AND accomodation.valid_from<=NOW() THEN 0
WHEN NOW()>accomodation.valid_to AND accomodation.valid_to!='0000-00-00' THEN 1 
WHEN MIN(accomodation_price.price) > '0' THEN 2
ELSE 3 END) as field3 from table1,table2...,tableN) as R
order by R.field3

关于mysql order by MIN() where NOT NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17551222/

相关文章:

mysql - 连接两个表,从两个表中选择值,第二个表没有记录

php - 相同的查询,不同的结果。 WordPress 排序

eclipse - Eclipse 中不修改大小写进行替换

javascript - 使用 Sequelize 和多个 OR 运算符动态构建 Where 子句

php - 在 wordpress 中使用 ajax 将数据发送到 php 时出错

sql - 如何修复 GROUP BY 中不允许的聚合函数?

php - 代码点火器 : Error in ORDER BY CASE query

sql - 如何在 "and"子句中​​使用 "or"和 "Where"

sql-server - 为什么在 Where 子句中使用 Case

php - 回显 $image,其中用户名是 $name