Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie zu lösen ist nicht im GROUP BY-Fehler in der MySQL-Abfrage

Jedes nicht aggregierte Feld sollte gruppiert werden.

Dies ist ein Standardverhalten, das in mysql vom Modus ONLY_FULL_GROUP_BY abhängt.
Dieser Modus ist in>=5.7 standardmäßig aktiviert .

select posts.id, post.user_id, count(likings.id) as likes_count
from posts
left join likings on likings.post_id = posts.id and likings.isActive= 1
group by posts.id, posts.user_id
order by likes_count desc 
limit 5

Oder Sie können aggregate es:

select posts.id, MIN(post.user_id), count(likings.id) as likes_count
from posts
left join likings on likings.post_id = posts.id and likings.isActive= 1
group by posts.id
order by likes_count desc 
limit 5

Andere Möglichkeit - sql_mode ändern :

SET SESSION sql_mode = '';

Sie können es auch in 2 Abfragen aufteilen:

  1. Aggregierte und Beitrags-IDs erhalten
  2. Beitragsdaten mit abgerufenen IDs abrufen (mit IN clause )