sql >> Database >  >> RDS >> Mysql

Oplossen staat niet in GROUP BY-fout in mysql-query

Elk niet-geaggregeerd veld moet worden gegroepeerd.

Het is standaardgedrag, dat in mysql afhangt van de ONLY_FULL_GROUP_BY-modus.
Deze modus is standaard ingeschakeld in>=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

Of u kunt aggregate het:

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 manier - verander sql_mode :

SET SESSION sql_mode = '';

U kunt het ook opdelen in 2 zoekopdrachten:

  1. Geaggregeerde en post-ID's ophalen
  2. Gegevens van berichten ophalen met opgehaalde id's (met IN clause )


  1. Kan ik een functie gebruiken voor een standaardwaarde in MySql?

  2. Converteer 'smalldatetime' naar 'date' in SQL Server (T-SQL-voorbeelden)

  3. ScaleGrid verhoogt groeiaandelenronde van Spotlight Equity Partners om uitbreiding te versnellen en verder te investeren in productroutekaart

  4. 12c VARCHAR2(32767)