这是一个示例表:
CREATE TABLE `deals_unsorted`.`temp_demo` (
`id` INT( 4 ) NOT NULL AUTO_INCREMENT ,
`price` INT( 5 ) NOT NULL ,
`name` VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM
和一些示例数据
INSERT INTO `deals_unsorted`.`temp_demo` (
`id` ,
`price` ,
`name`
)
VALUES (
'1', '1300', 'suite'
), (
'2', '1200', 'suite'
), (
'3', '1100', 'standard'
), (
'4', '1000', 'standard'
), (
'5', '800', 'basic'
), (
'6', '900', 'basic'
), (
'7', '500', 'dorn room'
), (
'8', '500', 'dorm room'
), (
'9', '800', 'twin'
), (
'10', '750', 'twin'
)
但我怎么在世界上找到价格最低的所有独特房间?
我尝试了SELECT DISTINCT(name), MIN(price) FROM temp_demo;
和许多版本,但计算机表示不用谢谢:
1140 - 如果没有GROUP BY子句,混合GROUP列(MIN(),MAX(),COUNT(),...)没有GROUP列是非法的
如果有人可以帮我解决这个简单的表格,我相信它对别人也有帮助。我见过很多复杂表格的例子,我无法理解它。
我希望的是整行:
2, 1200, suite
4, 1000, stanbard
5, 800, basic
7 or 8, 500, dorm room
10, 750, twin
因为它们的独特名称价格最低
答案 0 :(得分:3)
要获得每个不同名称的最低价格,您不需要DISTINCT
,而是GROUP BY
。然后,内部GROUP BY
查询返回的名称/价格对与表格其余部分的id
值匹配JOIN
。
SELECT id, nmin.name, nmin.price
FROM deals_unsorted JOIN (
SELECT name, MIN(price) AS price FROM deals_unsorted GROUP BY name
) nmin ON deals_unsorted.name = nmin.name AND deals_unsorted.price = nmin.price
答案 1 :(得分:1)
由于您还想要返回房间号,因此您需要一个相关的子查询。请注意,这将返回两个关联记录,而不是使用或连接数字。
select * from temp_demo t1 where price=(select min(price)
from temp_demo t2 where t1.name=t2.name)
答案 2 :(得分:1)
这就是工作:
SELECT id, name, MIN(price)FROM deals_unsorted GROUP BY name
好吧,差不多。它不会返回 7或8,500,宿舍。但除此之外它还有效。