【问题标题】:MySQL group by min() and limit outputMySQL 按 min() 分组并限制输出
【发布时间】:2016-02-18 02:37:11
【问题描述】:

这是我正在使用的当前 SQL 查询:

SELECT Merchant.Product, Merchant.Name, Merchant.Price
FROM a_table AS Merchant
JOIN
(
SELECT Product, MIN(Price) AS MinPrice
FROM a_table
GROUP BY Product
) AS Price
ON Merchant.Product = Price.Product
AND Merchant.Price = Price.MinPrice

来自这个数据集:

Product    Name         Price   
11          Merch1      19.00   
11          Merch2      20.00
11          Merch3      19.00
11          Merch4      19.50
12          Merch1      20.00   
12          Merch2      20.00
13          Merch1      17.00
13          Merch3      15.00

当前SQL在价格相同时输出多条产品记录如下:

Product    Name         Price   
11          Merch1      19.00
11          Merch3      19.00   
12          Merch1      20.00
12          Merch2      20.00   
13          Merch3      15.00

我想按产品分组并显示最低价格和相应的行数据。如果一个产品的两个价格相同,则使用找到的第一个记录。

试图得到这个结果:

Product    Name         Price   
11          Merch1      19.00   
12          Merch1      20.00   
13          Merch3      15.00

【问题讨论】:

  • 完全消除连接。 select merchant.*, min(price) ... group product。您最终会得到 mysql 首先遇到的任何商家,但每个产品 id 只会获得一个最低价格记录。
  • 更新了原始问题以更好地描述我想要实现的目标。

标签: mysql group-by limit min


【解决方案1】:

您不需要任何连接来执行此操作。

如果您想按商家获取每种产品的最低价格,您可以这样做:

SELECT Product, Name, MIN(Price) as MinPrice
FROM a_table
GROUP BY Product, Name

如果您只想要产品的最低价格而不考虑商家,您可以这样做:

SELECT Product, MIN(Price) as MinPrice
FROM a_table
GROUP BY Product

【讨论】:

  • 当我运行底部查询时,它返回最低价格,但名称和产品似乎来自不同的行。
  • @ShamusMay,您是否正在运行顶部(第一个)查询?底部的应该只返回产品,而不是名称。顶部查询将按产品和名称分组,然后为您提供具有该产品和名称的所有行的最低价格。
  • 我确定这只是我没有解释最终结果应该是正确的。需要返回每个产品(sku)价格最低的行。这些查询似乎都没有这样做。我已经尝试了两个查询link
  • 我知道我需要按产品分组。最低价格返回,但与该记录关联的名称不正确。
  • 您还需要像上面的示例一样按名称分组。更新fiddle
【解决方案2】:

这是最终满足我需求的查询...

http://sqlfiddle.com/#!9/c8937c/35/0

SELECT emp2.product,
       emp1.name,
       emp2.MinPrice
FROM (
  SELECT product,
     Min(price) as MinPrice
  FROM   Merchant
 GROUP BY product
) as emp2 JOIN Merchant as emp1 ON emp1.price = emp2.MinPrice
GROUP BY product;

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 2014-02-17
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    相关资源
    最近更新 更多