在多个表中使用min()

时间:2011-11-16 09:56:43

标签: mysql sorting select

我的sql知识不是那么好,经过2个小时的头脑风暴,我决定在这里问我的朋友们。

这是我的问题,我正在开发一个旅游网站。有地区和价格表。结构基本上是这样的。

regions             region_contents         prices
-------             ----------------        --------
regionId            regionId                priceId
regionName          hotelId                 hotelId
someMoreFields      someMoreFields          price
                                            beginDate
                                            endDate
                                            someMoreFields

我想要的数据是

  +-----------------+-------------+-------------------------+
  |        hotelId  |  hotelName  |  min price for this Id  |
  +-----------------+-------------+-------------------------+
  |        hotelId  |  hotelName  |  min price for this Id  |
  +-----------------+-------------+-------------------------+
  |        hotelId  |  hotelName  |  min price for this Id  |
  +-----------------+-------------+-------------------------+
  |        hotelId  |  hotelName  |  min price for this Id  |
  +-----------------+-------------+-------------------------+

我查询特定地区的所有酒店,按每家酒店的最低价格订购,每家酒店的最终价格日期应晚于NOW()。

提前致谢。 也是语法不好的人。

3 个答案:

答案 0 :(得分:1)

此查询应该是您所需要的:

SELECT hotel_id, hotel_name, MIN(price)
FROM region
JOIN region_contents 
   ON regionName = <reqdname> AND region.regionID = region_contents.regionID
JOIN prices 
   ON region_contents.hotel_id = prices_hotel_id
WHERE end_date > NOW()
GROUP BY hotel_id
ORDER BY MIN(price)

答案 1 :(得分:0)

我认为您需要所有表格中的数据,JOIN后跟GROUP BY来使用MIN()函数:

SELECT rc.hotelId, rc.hotelName, MIN(p.price) FROM regions r
LEFT JOIN region_contents rc ON r.regionId = rc.regionId
LEFT JOIN prices p ON p.hotelId = rc.hotelID
GROUP BY rc.hotelId

MySQL manual on GROUP BY-agregated functions

答案 2 :(得分:0)

也许我错过了一些东西,但这似乎很简单......

SELECT
 hotelId,
 hotelName,
 MIN(price)
FROM
 region_contents
INNER JOIN
 prices
ON
 region_contents.hotel_id = prices.hotel_id
GROUP BY
 hotelId,
 hotelName
ORDER BY
 MIN(price)