sql >> Databáze >  >> RDS >> Mysql

SQL:Výběr počtu více tabulek

Problém je matematika s hodnotami null a řazení s hodnotami null (zaškrtněte volbu "NULLS LAST" pro přepsání výchozího řazení, které vrací hodnoty null jako první pro sestupné pořadí).

Ve vašem případě s vnějším spojením, pokud má uživatel spoustu komentářů k článku, ale žádné komentáře na fóru, dobře, 100 + null =null v matematice Oracle. Takže aby matematika fungovala, musíte nastavit null=0. To je místo, kde přichází na řadu NVL() (a má také příjemný vedlejší efekt odstranění otravných nul z vaší sady výsledků)!

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

Vidím, že máte ve svých značkách MySQL i Oracle - výše uvedené platí pro Oracle. Pokud pro MYSQL místo toho použijte COALESCE(COUNT(),0).



  1. Začněte prohlížet výsledky dotazu před ukončením dotazu

  2. StarJoinInfo v prováděcích plánech

  3. Jak volat proceduru, která používá stejnou tabulku v po aktivaci

  4. MySQL:součet každého dne