This question already has answers here:
SQL select only rows with max value on a column [duplicate]
(27个答案)
在8个月前关闭。
我有一个数据库表“ Accomodation”,其中列出了酒店/ B&B套房及其所在城市的信息,价格和用作主键的每个套房的ID。
它看起来类似于:
我想列出每个城市最便宜的住宿的所有信息,但是,如果两个记录的价格都相同,则我要同时显示这两个价格。
结果应如下所示:
我尝试使用
但是,这将产生一个这样的表
由于120的价格是阿姆斯特丹最便宜的,因此它也将出现在巴黎。
如果我在子查询的末尾添加group by语句,如下所示:
它将无法显示相同的最低值,而我只有这样的表:
(27个答案)
在8个月前关闭。
我有一个数据库表“ 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
最佳答案
首先按城市分组,以获取每个城市的最低价格,然后加入表格:
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
关于mysql - 为共享相同列值的每个表条目选择最低的整数值(非唯一),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56567756/