MySQL - 分组按一列并获得最低值

时间:2012-03-23 19:04:59

标签: mysql group-by greatest-n-per-group

我正在尝试为按列分组的每组数据返回最低值。

在英语中,我想通过住宿安排我的数据分组,但只返回每个住宿的最低人均价格。

我在MySQL Group By get title column with smallest date value

找到了一个类似的例子(我在下面的尝试)
SELECT t1 . * FROM tbl_TravelFeed AS t1
    INNER JOIN
    (SELECT pk_id, MIN( perperson ) AS perperson FROM tbl_TravelFeed
        GROUP BY accommodation
        ORDER BY perperson) AS t2    
   ON t1.pk_id = t2.pk_id AND t1.perperson = t2.perperson

这似乎几乎可以工作,但它会按最低ID而不是按人员返回记录。我无法理解为什么能够纠正它。

我正试图在星期二(12月3日,27日)完成一项大学任务,并希望能够正常运作,但从更大的角度来看,它并不重要。

我尝试了很多方法,包括使用Distinct。上面的查询似乎最接近它。

非常感谢任何帮助。

亚伦

3 个答案:

答案 0 :(得分:2)

这是未经测试的,但这就是我在MySQL中编写它的原因,我将我的子查询放在WHERE语句中的原因是我可以轻松地从这个查询中创建一个VIEW并始终将结果存储在一个单独的视图中所以我可以对此提出质疑。

SELECT * FROM tbl_Travelfeed AS t
WHERE perperson =
(
  SELECT MIN(perperson)
  FROM tbl_Travelfeed
  WHERE accommodation = t.accommodation
)

答案 1 :(得分:0)

你非常接近。由于您按住宿进行分组,因此内部表格和外部表格中的相应链接是accommodation字段,而不是pk_id

(SELECT accommodation, MIN( perperson ) AS perperson FROM tbl_TravelFeed
    GROUP BY accommodation
    ORDER BY perperson) AS t2
ON t1.**accommodation** = t2.**accommodation** AND t1.perperson = t2.perperson

答案 2 :(得分:0)

SELECT t.* 
FROM 
        tbl_TravelFeed AS t
    INNER JOIN
        ( SELECT accommodation
               , MIN(perperson) AS perperson 
          FROM tbl_TravelFeed
          GROUP BY accommodation
        ) AS g 
      ON  g.accommodation = t.accommodation
      AND g.perperson = t.perperson