sql >> Databasteknik >  >> RDS >> Mysql

SQL:Välj antal av flera tabeller

Problemet är matematik med nollor, och ordning med nollor (kolla in i alternativet "NULLS SIST" för att åsidosätta standardordningen som returnerar nollorna först för en fallande ordning).

I ditt fall, med de yttre anslutningarna, om användaren har massor av artikelkommentarer men inga forumkommentarer, ja, 100 + null =null i Oracle-matematik. Så för att få matematiken att fungera måste du göra null=0. Det är där NVL() kommer in (och har också den trevliga bieffekten att eliminera irriterande nollor från din resultatuppsättning)!

SELECT u.id, u.username, (NVL(COUNT(a.id),0) + NVL(COUNT(f.id),0)) AS rank 
FROM site_users u 
  LEFT JOIN site_articles_comments a ON a.user_id = u.id 
  LEFT JOIN site_forum_comments f ON f.user_id = u.id 
GROUP BY u.username, u.id ORDER BY rank DESC LIMIT :l

Jag ser att du har både MySQL och Oracle i dina taggar - ovanstående är för Oracle. Om för MYSQL använd COALESCE(COUNT(),0) istället.



  1. Ersätt alla fält i MySQL

  2. PLSQL genererar slumpmässigt heltal

  3. PostgreSQL-index på JSON

  4. Strikt automatiskt öka värdet i MySQL