合并两列并按 asc 排序
Posted
技术标签:
【中文标题】合并两列并按 asc 排序【英文标题】:combine two columns en sort asc 【发布时间】:2019-11-20 21:15:10 【问题描述】:我有一个关于 mysql 功能排序的问题。
在数据库中,有两个价格的行。 price_min 和 price_max。例如:
ID | NAME | PRICE_MIN | PRICE_MAX
1 | NAME A | 100 | 350
2 | NAME B | 0 | 250
3 | NAME C | 0 | 90
4 | NAME D | 125 | 500
5 | NAME E | 50 | 0
6 | NAME F | 25 | 0
我想要查询两列都从低到高排序。如果可能,显示价格为 MIN 和 Max 双倍的行。所以在这个例子中我会得到 8 个结果,比如:
ID:6、5、3、1、4、2、1、4。
这可能吗?我将如何做到这一点?
【问题讨论】:
【参考方案1】:这不仅仅是order by
,因为您要更改行数。如果我理解正确,您可以使用union all
获取所有非零价格,然后按此订购:
select ID, NAME, PRICE_MIN, PRICE_MAX
from ((select ID, NAME, PRICE_MIN, PRICE_MAX, PRICE_MIN as price
from t
where price_min <> 0
) union all
(select ID, NAME, PRICE_MIN, PRICE_MAX, PRICE_MAX as price
from t
where price_max <> 0
)
) p
order by price;
【讨论】:
嗨,戈登,非常感谢您的快速回答和解决方案!在过去的几个小时里,我没有得到正确的答案或搜索方式。这对我有用!【参考方案2】:双打:)
SELECT
id, name, price_min, price_max,
(price_min != 0 AND price_max != 0) as `double`
FROM (
SELECT
*,
price_min as price
FROM
`data`
WHERE price_min != 0
UNION
SELECT
*,
price_max as price
FROM
`data`
WHERE price_max != 0
) as `temp`
ORDER BY price
db-fiddle
我选择了UNION
而不是UNION ALL
,因为如果price_min
和price_max
在一行中相同,您会得到两行相同的行。
【讨论】:
以上是关于合并两列并按 asc 排序的主要内容,如果未能解决你的问题,请参考以下文章