MySQL 从两列按值排序
Posted
技术标签:
【中文标题】MySQL 从两列按值排序【英文标题】:MySQL ordering by value from two columns 【发布时间】:2014-03-07 12:28:31 【问题描述】:在一个表格行中,我有一列 product_price。如果产品的价格(折扣)较低,则在 sql 结果中将 discount_price 列设置为别名。如果产品没有打折(没有更低的价格),此列的 discount_price 为空。
我想要的是订购这一套并按 product_price(如果 discount_price 为空)和 discount_price 的值排序。
例如
----------------------------------------
ID product_price discount_price
----------------------------------------
1 4800 NULL
2 13000 4400
3 3300 NULL
4 10500 9600
5 1600 NULL
我想在下单时得到这个结果:(如果 discount_price 为 null,则检查 product_price 中的值,如果 discount_price 为 not_null,则检查 discout_price 中的值)
----------------------------------------
ID product_price discount_price
----------------------------------------
4 10500 9600
1 4800 NULL
2 13000 4400
3 3300 NULL
5 1600 NULL
【问题讨论】:
如果可以试试ORDER BY IFNULL(discount_price, product_price)
我不确定这样的事情是否可行,但值得一试
你想要的结果没有意义,也没有按照你说的顺序排列。
您是否尝试过构建查询?
您也可以使用COALESCE
函数,它选择第一个非空值:ORDER BY COALESCE(discount_price, product_price)
(这一切都归结为您发现更具可读性:IF、IFNULL、CASE , 合并)
【参考方案1】:
试试这个:
SELECT * FROM my_table
ORDER BY IFNULL(discount_price, product_price);
【讨论】:
【参考方案2】:试试这个
SELECT * FROM table1
ORDER BY CASE WHEN discount_price IS NULL then PRODUCT_PRICE
WHEN discount_price IS NOT NULL then discount_price
END DESC
DEMO HERE
【讨论】:
嗯,这基本上就是IFNULL
所做的……您尝试过IFNULL
方法吗?那时代码会更简洁更短。我猜也更快以上是关于MySQL 从两列按值排序的主要内容,如果未能解决你的问题,请参考以下文章