好的,所以我的表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。
答案 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)
上创建一个索引,以便快速工作。