合并两列并按 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_minprice_max 在一行中相同,您会得到两行相同的行。

【讨论】:

以上是关于合并两列并按 asc 排序的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA代码过滤两列并提取数据

比较两个excel的两列并返回第三列

Pandas DataFrame Groupby 两列并获取计数

同时迭代两列并根据条件更改单元格的值

比较两列并过滤列与相邻类

在 Pyspark 中,我如何比较两列并在它们不相同时使用 x