【问题标题】:mysql order by MIN() where NOT NULLmysql order by MIN() where NOT NULL
【发布时间】:2013-07-07 05:40:40
【问题描述】:

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

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) 没有任何价值...首先我想要一些价值的结果,然后是其他结果...

这是我的代码,带有 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";

【问题讨论】:

  • accommodation_price.price的字段类型是什么?
  • 我忘记添加,当有空白结果时 - 这意味着 accomodation_price 中没有任何行......所以我不知道在这种情况下,当我选择 MIN( accomodation_price.price)

标签: mysql case where min


【解决方案1】:

您应该做的是将该字段(连同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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2023-02-21
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多