通过另一个不同的column2选择column1的MIN和MAX并获取整行

时间:2015-06-28 12:35:41

标签: mysql select distinct greatest-n-per-group min

好的,所以我的表Television有超过1,000条记录,如下所示:

ID     Code    Source   Brand       Price
-----------------------------------------
930    A584    C11      Panasonic   512
843    VG873   U19      Sony        590
301    A584    J63      Panasonic   494
738    D900    T32      Samsung     378
786    VG873   Y91      Sony        575
409    E764    G48      LG          435
912    VG873   Y91      Sony        535
626    E764    H14      LG          460
581    E764    C55      LG          455
557    D900    I42      Samsung     390

我试图运行一个查询,从价格大于或等于400美元的每个不同品牌中获取最低价格,获取整行。上面示例集的结果应如下所示:

ID     Code    Source   Brand       Price
-----------------------------------------
301    A584    J63      Panasonic   494
409    E764    G48      LG          435
912    VG873   Y91      Sony        535

我在这里尝试了一些类似问题的答案,但结果却一分为二。我尝试的最后一个是以下,它是最接近的,但仍未达到预期的结果:

SELECT tv.* FROM Television tv
    INNER JOIN (SELECT Brand, MIN(Price) AS MinPrice 
    FROM Television
    GROUP BY Brand) groupedTV
ON tv.Brand= groupedTV.Brand
AND tv.Price= groupedTV.MinPrice
WHERE tv.Price>=400

感谢任何帮助。

编辑:更正了结果集(ID 301应该是Panasonic中最低的)。感谢@wilfo。

3 个答案:

答案 0 :(得分:0)

您的查询已关闭,但您需要子查询中的where子句:

SELECT tv.*
FROM Television tv INNER JOIN
     (SELECT tv.Brand, MIN(Price) AS MinPrice 
      FROM Television tv
      WHERE tv.Price >= 400
      GROUP BY tv.Brand
     ) groupedTV
     ON tv.Brand = groupedTV.Brand AND
        tv.Price = groupedTV.MinPrice;

答案 1 :(得分:0)

从您的示例中,松下线不应该是ID为GROUP BY的行吗?

关于解决方法,在使用SQL时,您可以使用某些HAVING表达式。具体来说,请尝试阅读SELECT id, brand, price, min(price) FROM Television tv GROUP by brand HAVING price >= 400

我会选择:

int

答案 2 :(得分:0)

SELECT  t.*
FROM    (
        SELECT  DISTINCT brand
        FROM    television
        ) td
JOIN    television t
ON      t.id = 
        (
        SELECT  id
        FROM    television ti
        WHERE   ti.brand = td.brand
                AND ti.price >= 400
        ORDER BY
                ti.brand, ti.price
        LIMIT 1
        )

television (brand, price)上创建一个索引,以便快速工作。