为每个共享相同列值的表条目选择最低的整数值(非唯一)

时间:2019-06-12 17:45:28

标签: mysql

我有一个数据库表“ 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

1 个答案:

答案 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