2017-01-10 56 views
1

我讀http://rpbouman.blogspot.de/2007/05/debunking-group-by-myths.html簡單的MySQL 5.7 only_full_group_by計數

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

,但仍然得到錯誤試圖重寫一個簡單的MySQL查詢...

表:Event_Visitors

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

這是我的兩個外鍵的表。 現在我想請執行以下查詢:

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

我知道by子句將EV-updated_time到組解決該問題。但我想要統計行數並且不顯示用戶的每一行。 (統計用戶參加的所有事件)。

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

我不明白。我的意思更新時間取決於USER_ID + EVENT_ID所以如果我添加USER_ID到GROUP BY和MIN(EVENT_ID)應該工作?

回答

1

爲什麼不只是寫你想要的查詢?也就是說,通過將所有未彙總的列置於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; 

或者你打算這樣:通過「僅僅」將USER_ID

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; 
+0

如果我的推杆在GROUP_BY所有的非聚集列,它不會被「分組」。在上面的查詢中,我將獲得每個用戶的數量,這些用戶是按照rsvp進行分組和更新的時間。我想要的是某些用戶正在參與的所有事件(不同的user_id)並對行進行計數。 – Markus

+0

P.S.第二個查詢失敗的原因是按順序by子句中的MAX(ev.updated_time)。 – Markus

+0

@Markus。 。 。第二個查詢應該正是因爲'ORDER BY'中的'MAX()'而工作。 –