我有一个关于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
我想要一个查询,两列都从低到高排序。如果可能的话,显示价格为最小和最大两倍的行。所以在这个例子中,我会得到8个结果,比如:
ID:6,5,3,1,4,2,1,4。
这可能吗?我该怎么做?
这不仅仅是一个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;
带双精度:(
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
相同,则会得到两个相同的行。