我有一个数据库表“ Accomodation”,其中列出了旅馆/ B&B套房及其所在城市的信息,价格和每个套房的价格和ID(用作主键)。
它看起来类似于:
id | city | Price
ams001 | Amsterdam | 160
ams011 | Amsterdam | 120
par004 | Paris | 90
par006 | Paris | 120
rom005 | Rome | 130
rom015 | Rome | 130
我想列出每个城市最便宜的住宿的所有信息,但是,如果两个记录的最低价格相同,我想同时显示这两个价格。
结果应如下所示:
ams011 | Amsterdam | 120
par004 | Paris | 90
rom005 | Rome | 130
rom015 | Rome | 130
我尝试使用
SELECT * FROM accomodation
WHERE price IN (SELECT MIN(price) FROM accomodation GROUP BY city);
但是这将产生一个这样的表
ams011 | Amsterdam | 120
par004 | Paris | 90
par006 | Paris | 120
rom005 | Rome | 130
rom015 | Rome | 130
因为120的价格是阿姆斯特丹最便宜的价格,所以它也将出现在巴黎。 如果我在子查询的末尾添加group by语句,如下所示:
SELECT * FROM accomodation
WHERE price IN (SELECT MIN(price) FROM accomodation GROUP BY city)
GROUP BY city;
它将无法显示相同的最低值,而我只有这样的表:
ams011 | Amsterdam | 120
par004 | Paris | 90
rom015 | Rome | 130
答案 0 :(得分:0)
首先按城市分组,以获取每个城市的最低价格,然后加入表格:
SELECT a.*
FROM accomodation a INNER JOIN (
SELECT city, MIN(price) minprice
FROM accomodation
GROUP BY city
) g ON g.city = a.city AND g.minprice = a.price