Każde pole niezagregowane powinno być pogrupowane.
Jest to standardowe zachowanie, które w mysql zależy od trybu ONLY_FULL_GROUP_BY.
Ten tryb jest domyślnie włączony w>=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
Lub możesz aggregate
to:
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
Inny sposób - zmień sql_mode
:
SET SESSION sql_mode = '';
Możesz również podzielić to na 2 zapytania:
- Pobierz identyfikatory zbiorcze i postów
- Pobierz dane postów z pobranymi identyfikatorami (z klauzulą
IN clause
)