mysql - 从链接表中获取 MIN、MAX 值
问题描述
我在 MYSQL DB 中有 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
订购_产品
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
因为它涉及
现在我想知道特定订单中所有产品的最低和最高价格
您可以使用 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>
让我知道这是否适合您。
推荐阅读
- android - Android ViewModelProvider.of() 找不到符号
- javascript - ContextAPI:如何在 React 的上下文之间共享数据?
- javascript - 将内容从 MySQL 加载到 CKEditor 时出现问题
- r - 无法将包含 Python 代码的 R-notebook 编织成 PDF
- git - git diff 本地与远程功能分支
- java - JAVA:即使使用 nextLine() 函数,扫描程序也不会接受带空格的字符串输入
- c - 在在线 HASH 生成器上检查 HMAC 哈希的结果
- c - 在 c 中实现一个基本的策略模式
- python-3.x - 如何自定义排序列表,第一个元素有例外,然后默认
- bash - 有没有办法可以使用 Azure Pipeline 中的变量更新 dockerfile?