从链接中获取 MIN、MAX 值 table
Get MIN, MAX values from a linking table
我在 MYSQL 数据库中有 3 个表
订购
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
-------------------------
1 | 1
2 | 1
1 | 2
4 | 2
现在,当我按 order_id 给出特定产品 ID 组时,我想知道特定订单中所有产品的最低和最高价格。
前:
order_id | min_price | max_price
-----------------------------------------
1 | 30(p_id=1) | 34(p_id=2)
2 | 25(p_id=4) | 30(p_id=1)
您可以使用以下内容:
SELECT
op.order_id,
MIN(p.product_price) as min_price,
MAX(p.product_price) as max_price
FROM
ORDER_PRODUCTS op
INNER JOIN
PRODUCTS p ON op.product_id = p.product_id
GROUP BY
op.order_id
编辑 1
因为它属于
Now I want to know the min and max prices of all products in a
specific order
您可以使用 where 子句来仅考虑特定订单
SELECT
op.order_id,
MIN(p.product_price) as min_price,
MAX(p.product_price) as max_price
FROM
ORDER_PRODUCTS op
WHERE
op.order_id = <insert order id here>
INNER JOIN
PRODUCTS p ON op.product_id = p.product_id
GROUP BY
op.order_id
或者,如果您想确定具有特定产品的订单的最低和最高价格,您可以修改您的 where 子句,以使用带有子查询的 IN
SELECT
op.order_id,
MIN(p.product_price) as min_price,
MAX(p.product_price) as max_price
FROM
ORDER_PRODUCTS op
WHERE
op.order_id IN (
SELECT inc.order_id
FROM ORDER_PRODUCTS inc
WHERE inc.product_id = <insert product id here>
)
INNER JOIN
PRODUCTS p ON op.product_id = p.product_id
GROUP BY
op.order_id
或者简单地使用带有 case 语句的 having 子句来过滤
SELECT
op.order_id,
MIN(p.product_price) as min_price,
MAX(p.product_price) as max_price
FROM
ORDER_PRODUCTS op
INNER JOIN
PRODUCTS p ON op.product_id = p.product_id
GROUP BY
op.order_id
HAVING
SUM(
CASE WHEN op.product_id = <insert product id here> THEN 1 END
) > 0
注意。请在测试时将 <insert product id here>
和 <insert order id here>
替换为实际值。
让我知道这是否适合你。
我在 MYSQL 数据库中有 3 个表
订购
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
-------------------------
1 | 1
2 | 1
1 | 2
4 | 2
现在,当我按 order_id 给出特定产品 ID 组时,我想知道特定订单中所有产品的最低和最高价格。
前:
order_id | min_price | max_price
-----------------------------------------
1 | 30(p_id=1) | 34(p_id=2)
2 | 25(p_id=4) | 30(p_id=1)
您可以使用以下内容:
SELECT
op.order_id,
MIN(p.product_price) as min_price,
MAX(p.product_price) as max_price
FROM
ORDER_PRODUCTS op
INNER JOIN
PRODUCTS p ON op.product_id = p.product_id
GROUP BY
op.order_id
编辑 1
因为它属于
Now I want to know the min and max prices of all products in a specific order
您可以使用 where 子句来仅考虑特定订单
SELECT
op.order_id,
MIN(p.product_price) as min_price,
MAX(p.product_price) as max_price
FROM
ORDER_PRODUCTS op
WHERE
op.order_id = <insert order id here>
INNER JOIN
PRODUCTS p ON op.product_id = p.product_id
GROUP BY
op.order_id
或者,如果您想确定具有特定产品的订单的最低和最高价格,您可以修改您的 where 子句,以使用带有子查询的 IN
SELECT
op.order_id,
MIN(p.product_price) as min_price,
MAX(p.product_price) as max_price
FROM
ORDER_PRODUCTS op
WHERE
op.order_id IN (
SELECT inc.order_id
FROM ORDER_PRODUCTS inc
WHERE inc.product_id = <insert product id here>
)
INNER JOIN
PRODUCTS p ON op.product_id = p.product_id
GROUP BY
op.order_id
或者简单地使用带有 case 语句的 having 子句来过滤
SELECT
op.order_id,
MIN(p.product_price) as min_price,
MAX(p.product_price) as max_price
FROM
ORDER_PRODUCTS op
INNER JOIN
PRODUCTS p ON op.product_id = p.product_id
GROUP BY
op.order_id
HAVING
SUM(
CASE WHEN op.product_id = <insert product id here> THEN 1 END
) > 0
注意。请在测试时将 <insert product id here>
和 <insert order id here>
替换为实际值。
让我知道这是否适合你。