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

Posted

技术标签:

【中文标题】MySQL - 按一列分组并获得最低值【英文标题】:MySQL - Group By one column and get the lowest value 【发布时间】:2012-04-08 08:38:46 【问题描述】:

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

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

我在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 而不是个人返回记录。我不明白为什么能够纠正它。

我正在努力完成周二(2012 年 3 月 27 日)的大学作业,我希望它能够正常工作,但从大局来看这并不重要。

我已经尝试了很多方法来做到这一点,包括使用 Distinct。上面的查询似乎最接近它。

非常感谢您的帮助。

亚伦

【问题讨论】:

@Cfreak 为什么要删除作业标签? OP 声明这是一项大学作业。 @jzworkman 如果我这样做是偶然的。我试图清理查询 【参考方案1】:
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  

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

你很亲密。由于您是按住宿分组,因此内表和外表的适当链接是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

【讨论】:

这非常接近,谢谢。只需要处理多个记录的最小值相同的情况

以上是关于MySQL - 按一列分组并获得最低值的主要内容,如果未能解决你的问题,请参考以下文章

如何按一列分组并对另一列的值进行排序?

按一列分组并在熊猫中找到另一列的总和和最大值

新的滚动平均值列,按一列分组并找到另一列的滚动平均值

我需要按一列分组并显示一个数据集中的更多列

我需要连接三个表,将结果按一列分组,并显示另一列的最大值

Hive Query 在 Select 中具有多列并按一列分组