Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment résoudre n'est pas dans l'erreur GROUP BY dans la requête mysql

Chaque champ non agrégé doit être regroupé.

C'est un comportement standard qui, dans mysql, dépend du mode ONLY_FULL_GROUP_BY.
Ce mode est activé par défaut dans>=5.7 .

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

Ou, vous pouvez aggregate il :

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

Autre manière - changez sql_mode :

SET SESSION sql_mode = '';

Aussi, vous pouvez le diviser en 2 requêtes :

  1. Obtenir des identifiants agrégés et de publication
  2. Obtenir les données des publications avec les identifiants récupérés (avec la IN clause )