如何从group_concat mysql的结果中获取最大值

时间:2014-07-18 15:26:08

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

我试图从group_concat的结果中获取最大值。

以下是示例数据,以及我尝试过的内容,

+----+---------+--------------------------+
| id | user_id | comment                  |
+----+---------+--------------------------+
|  1 |      80 | I don't need it any more |
|  2 |     222 | Don't need this account  |
|  3 |      80 | I have an other account  |
|  4 |      80 | The other comment        |
|  5 |     222 | some x                   |
+----+---------+--------------------------+
4 rows in set (0.01 sec)

我尝试了以下查询,

mysql> select max(group_concat(id  SEPARATOR ' ')), user_id from userapp_accactivitylog;

但它给了我错误

ERROR 1111 (HY000): Invalid use of group function

使用group_concat(id)我们会得到结果1,2,3,4,5。我的要求是我想从group_concat得到的结果中选择最大数字。

我希望您了解我在寻找什么,如果有办法达到以下结果,请告诉我:

+----+---------+--------------------------+
| id | user_id | comment                  |
+----+---------+--------------------------+
|  5 |     222 | some x                   |
|  4 |      80 | The other comment        |
+----+---------+--------------------------+
2 rows in set (0.01 sec)

我正在尝试按user_id分组,我想在id列中获取最大数量的记录(在本例中为5)。

2 个答案:

答案 0 :(得分:2)

这应该得到你想要的东西:

select
  user_id,
  max(id) as id,
  substring_index(group_concat(comment order by id desc SEPARATOR '|'), '|', 1)
from
  userapp_accactivitylog
group by user_id;

答案 1 :(得分:1)

这是问题的变体,经常被问到。

这是一个解决方案:

SELECT u.*
FROM (
    SELECT user_id, MAX(id) AS id 
    FROM userapp_accactivitylog 
    GROUP BY user_id) AS t
JOIN userapp_accactivitylog AS u USING (id)