MySQL由多个COALESCE订购(CAST

时间:2013-04-09 22:39:25

标签: mysql

我有一个包含4个varchar字段的表,我需要根据列是否为空来订购。

所以我的表结构是:

start_price     reserve_price     buy_now_price    current_bid_amount
---------------------------------------------------------------------
50.00           50.00             empty (not null) (Null)
190             190               empty (not null) (Null)
150             150               empty (not null) (Null)
20              150               empty (not null) (Null)
550             600               empty (not null) (Null)

我在下面有一个订单条款,但似乎没有正确排序。目前,结果订购190,150,50,20,550。

  

COALESCE命令(CAST(alcurrent_bid_amount已签名),   CAST(albuy_now_price AS SIGNED),CAST(alstart_price AS   签名),CAST(alreserve_price AS签名))ASC

基本上我需要根据current_bid_amount,buy_now_price,start_price,reserve_price以最低的顺序排序。因此,如果current_bid_amount和buy_now_price为空,请使用start_price。如果current_bid_amount为空,但buy_now_price不为,请使用buy_now_price。如果current_bid_amount中有值,则使用该值进行订购。

非常感谢。

1 个答案:

答案 0 :(得分:1)

将空字符串转换为已签名为0.所以你的buy_now_price可能会覆盖所有内容,因为它是空的但不是null。然后,您基本上不会进行排序,因为您的合并将始终为所有项目评估为0.

mysql> select cast('' as signed);
+--------------------+
| cast('' as signed) |
+--------------------+
|                  0 |
+--------------------+
1 row in set, 1 warning (0.00 sec)

mysql> select cast(null as signed);
+----------------------+
| cast(null as signed) |
+----------------------+
|                 NULL |
+----------------------+
1 row in set (0.00 sec)