从两个不同的表中查找最小最大值
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
我在 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