根据列值按结果更改顺序?

时间:2014-03-23 17:33:37

标签: mysql sql-order-by

我正在尝试按最低值对列进行排序,但如果值为0,那么我希望所有具有该值的列都放在最后而不是开头。

可以这样做吗?

刚才说查询是..

SELECT * FROM auctions ORDER BY a.discount_start_date ASC

有没有一种方法可以让我做我想做的事情?

3 个答案:

答案 0 :(得分:1)

在order by中使用case语句,这样如果值为0,则将其设置为该字段的最大可能值,否则返回该字段的值。

答案 1 :(得分:1)

在列ORDER BY FIELD上尝试a.discount_start_date

示例

SELECT * FROM auctions 
ORDER BY FIELD( a.discount_start_date, '0000-00-00'), a.discount_start_date;

discount_start_date列中具有零日期的所有记录都放在最后,其余的按升序排序并放在顶部。

请参阅
MySQL: FIELD(str,str1,str2,str3,...)

答案 2 :(得分:1)

您可以使用:

SELECT * FROM auctions 
ORDER BY
  CASE WHEN a.discount_start_date = 0 THEN 0 ELSE 1 END CASE DESC,
  a.discount_start_date ASC;

我建议您为数据使用适当的数据类型。