简单 MySQL 5.7 only_full_group_by 计数

Simple MySQL 5.7 only_full_group_by count

我读了http://rpbouman.blogspot.de/2007/05/debunking-group-by-myths.html

http://rpbouman.blogspot.nl/2014/09/mysql-575-group-by-respects-functional.html

但在尝试重写一个简单的 MySQL 查询时仍然遇到错误...

TABLE: Event_Visitors

Event_ID       |     User_ID     |user_level |rsvp_status | updated_time
foreign int(11)| foreign int(11) | int(3)    |  int(3)    | timestamp (onupdate)

这是我的 table,有两个外键。 现在我想执行以下查询:

SELECT min(ev.Event_ID), ev.User_ID, ev.rsvp_status, ev.updated_time, count(*) 
FROM EVENT_VISITORS ev
GROUP BY ev.User_ID
ORDER BY ev.updated_time DESC

并得到错误:

contains nonaggregated column 'markusp.ev.updated_time' which is not functionally dependent

我知道将 ev-updated_time 添加到 group by 子句可以解决问题。但我想计算行数而不是显示用户的每一行。 (统计用户参加的所有活动)。

Adding min(ev.Event_ID) or any_value(ev.Event_ID) doesnt fix the problem.

我不明白。我的意思是更新时间取决于 User_ID + Event_ID 所以如果我添加 User_ID 分组依据 MIN(Event_ID) 应该工作?

为什么不只写你想要的查询呢?也就是说,通过将所有非聚合列放在 group by 中来具体说明聚合和未聚合的列。一种方法是:

SELECT min(ev.Event_ID), ev.User_ID, ev.rsvp_status, ev.updated_time, 
       count(*) 
FROM EVENT_VISITORS ev
GROUP BY ev.User_ID, ev.rsvp_status, ev.updated_time
ORDER BY ev.updated_time DESC;

或者您可能打算这样做:

SELECT min(ev.Event_ID), ev.User_ID,  count(*) 
FROM EVENT_VISITORS ev
GROUP BY ev.User_ID
ORDER BY MAX(ev.updated_time) DESC;