简单 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;
我读了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;