【问题标题】:combine two columns en sort asc合并两列并按 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。

这可能吗?我将如何做到这一点?

【问题讨论】:

    标签: mysql sql sql-order-by


    【解决方案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 在一行中相同,您会得到两行相同的行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-10
      • 2015-05-12
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多