【问题标题】:i want to get lowest price values with id in mysql我想在 mysql 中获得 id 的最低价格值
【发布时间】:2021-01-07 13:08:23
【问题描述】:

我的查询是

SELECT productscrapeddatalog.*, product.productname 
FROM productscrapeddatalog JOIN product
  ON productscrapeddatalog.productID = product.productID 
WHERE price = (SELECT MIN(price) FROM productscrapeddatalog ORDER BY productID)

这是我的表格截图

【问题讨论】:

  • 你能提供一个fiddle吗?
  • 如果我理解,您想要每个不同 productID 的最低价格行吗?
  • 是的,你理解的没错
  • 这能回答你的问题吗? SQL MIN() & GROUP BY
  • use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图像中包含图例/键和说明。请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。对于 SQL,包括 DDL 和表格初始化。将所有需要的内容放在您的帖子中,而不仅仅是在链接中。 How to Askhelp center

标签: mysql sql subquery inner-join greatest-n-per-group


【解决方案1】:

您在 where 子句中使用连接和过滤的方法是可以的 - 但您需要将子查询与外部查询关联,以便获得每个产品的最低价格 em> 而不是整体最小值:

SELECT l.*, p.productname 
FROM productscrapeddatalog l
JOIN product p ON l.productID = l.productID 
WHERE l.price = (
    SELECT MIN(l1.price) 
    FROM productscrapeddatalog l1
    WHERE l1.productID = t.productID
)

如果您运行的是 MySQL 8.0,您也可以使用窗口函数来执行此操作:

SELECT l.*, p.productname 
FROM product p
JOIN (
    SELECT l.*, RANK() OVER(PARTITION BY productID ORDER BY price) rn 
    FROM productscrapeddatalog l
) p ON l.productID = l.productID AND l.rn = 1

【讨论】:

  • 这会给我整张桌子
  • @BalrajSingh:不,相关处理过滤。请自行尝试查询,看看它返回什么。
  • 我正在检查,这会给我整张桌子
【解决方案2】:

你应该试试这个:

SELECT productscrapeddatalog.*, product.productname, MIN(productscrapeddatalog.price) 
FROM productscrapeddatalog JOIN product
  ON productscrapeddatalog.productID = product.productID 
ORDER BY productID

【讨论】:

  • 不,这只给我 1 的结果,但我想要 2 , 3 与此
猜你喜欢
  • 2018-10-12
  • 1970-01-01
  • 2015-09-16
  • 2012-06-07
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 2014-03-06
相关资源
最近更新 更多