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 从两列按值排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫中按值计数对列进行排序

如何在mysql中按值排序

mysql 按值排序

mysql 按值排序

sql 从两列PHP MySql中查找排名

MySQL - 从两列中选择不同的值