从链接中获取 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> 替换为实际值。

View working demo db fiddle

让我知道这是否适合你。