Mysql,如何使用另一列的最大值对一组行进行分组?

Posted

技术标签:

【中文标题】Mysql,如何使用另一列的最大值对一组行进行分组?【英文标题】:Mysql, How to group a set of rows by using the max value of another column? 【发布时间】:2016-04-27 19:46:35 【问题描述】:

我有一张表,其中可能有一行或多行的 key_property 列具有相同的值。

我想在 mysql 中构建一个查询,它返回一个集合,其中 key_property 的每个值仅代表其对应的一个行,并且 它还接收一个 key_property 过滤器 表示 like 句子,由另一列的最大值选择(例如,event_id)。

我怎样才能做到这一点?

更新:

以下是未过滤表的示例:

+--------------+--------+----------+
| key_property | others | event_id |
+--------------+--------+----------+
|    abcd      | B      |     1    |
|    abcd      | A      |     2    |
|    defg      | C      |     3    |
|    abcd      | D      |     4    |
|    hijk      | f      |     4    |
+--------------+--------+----------+

在过滤器设置为“d”的情况下执行查询时,结果数据应如下所示:

+--------------+--------+----------+
| key_property | others | event_id |
+--------------+--------+----------+
|    abcd      | D      |     4    |
|    defg      | C      |     3    |
+--------------+--------+----------+

【问题讨论】:

dev.mysql.com/doc/refman/5.7/en/… 显示带有数据和结果的样本.. 你读过***.com/questions/7745609/… @codemonkeyliketab 我现在有,但它实际上并不能满足我的所有要求。我编辑了问题以使其更清楚。 在我看来,codemonkeyliketab 的建议加上额外的 where 条件 key_property like '%d%' 会起作用 【参考方案1】:
SELECT * 
FROM tab WHERE (key_property,event_id) IN 
( SELECT key_property, MAX(event_id)
  FROM tab
  WHERE key_property like '%d%'
  GROUP BY key_property
)

【讨论】:

@Daniel Calderon Mori 这应该按预期工作,不是吗?

以上是关于Mysql,如何使用另一列的最大值对一组行进行分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何按一列的最大值获取SQL行,按另一列分组

如何在 Hive SQL 中对一列中的数据进行分组并将其分布在另一列中?

根据由另一列分组的不同列的最大值获取值[重复]

如何通过 created_at 对一组行进行排序?

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

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