从两个不同的表中查找最小最大值

Find min max from two different tables

我在 MYSQL 数据库中有 3 个 table

订购

   order_id | order_date
-------------------------
      1     | 2021-09-20    
      2     | 2021-09-21 

产品

   product_id | product_price
------------------------------
      1       | 30    
      2       | 34
      3       | 39
      4       | 25  

ORDER_PRODUCTS

   product_id | order_id | discount_price
------------------------------------------
      1       | 1        |   null
      2       | 1        |   18
      1       | 2        |   null
      4       | 2        |   null

现在我想知道特定订单记录中所有产品的最低和最高价格,当我给出特定的 product_id(我需要所有具有所提供产品的订单)分组时 order_id.我为此获得了所需的数据,但这是棘手的部分,ORDER_PRODUCTS table 将为特定订单的特定产品提供 discounted_price。

因此,在计算 MIN、MAX 值时,我希望优先考虑 discount_price 而不是 product_price 如果该产品没有任何 discount_price 那么 product_price 应该被退回。

EX:

order_id  | min_price                     | max_price
------------------------------------------------------
      1   | 18(p_id=2)(discount price)    | 30(p_id=1)
      2   | 25(p_id=4)                    | 30(p_id=1)

如果我没看错你在寻找 IfNull() 函数,你可以阅读它 here

您可以简单地将 IfNull() 函数包围在适当的聚合函数中

select o.order_id, 
min(ifnull(discount_price,product_price)), 
max(ifnull(discount_price,product_price)) 
from PRODUCTS p  
inner join ORDER_PRODUCTS op on op.product_id  =p.product_id  
inner join ORDER o on o.order_id = op.order_id
group by o.order_id, p.product_id