【发布时间】:2021-03-22 23:15:27
【问题描述】:
我正在使用产品 ID 将产品表与报价表连接起来,我的要求是获得该产品的最高报价(%),同时我想为产品 ID 进行分组,因为我不想重复产品,但它显示了错误的报价 ID,因为加入查询首先基于产品 ID 执行:
产品表:
id name
1 abc
2 xyz
报价表
id to_date product_id offer
1 2020-12-18 1 30%
2 2020-12-18 1 40%
3 2020-12-18 2 30%
4 2020-12-18 2 40%
查询:
SELECT product_id,product.name,o.id as offer_id,o.to_date, max(o.offer)offer_price
FROM products
LEFT JOIN offers o ON o.product_id=product.id
GROUP BY product.id
有问题的输出(错误的报价 ID):
offer_id product_id to_date offer_price
1 1 2020-12-18 40%
3 2 2020-12-18 40%
预期输出(正确的报价 ID)
offer_id product_id to_date offer_price
2 1 2020-12-18 40%
4 2 2020-12-18 40%
【问题讨论】:
-
您的 GROUP BY 无效,并且会在较新的 MySQL 版本中引发错误(除非在兼容模式下。)
-
您使用的是哪个 MySQL 版本?
-
mysql 版本 5.6.49
-
@jarlh 你能告诉我查询,它不会在未来版本中使用 group by 并实现完美的报价 id
-
在子查询中进行 GROUP BY 以获取每个产品的最高报价。加入。
标签: mysql sql subquery left-join greatest-n-per-group