Mysql
 sql >> Database >  >> RDS >> Mysql

SQL:selezione del conteggio di più tabelle

Il problema è la matematica con i valori nulli e l'ordinamento con i valori nulli (controlla nell'opzione "NULLS LAST" per ignorare l'ordinamento predefinito che restituisce prima i null per un ordine decrescente).

Nel tuo caso, con i join esterni, se l'utente ha un sacco di commenti sull'articolo ma nessun commento sul forum, beh, 100 + null =null in Oracle Math. Quindi per far funzionare la matematica devi rendere null=0. È qui che entra in gioco NVL() (e ha anche il piacevole effetto collaterale di eliminare fastidiosi null dal set di risultati)!

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

Vedo che hai sia MySQL che Oracle nei tuoi tag:quanto sopra è per Oracle. Se per MYSQL usa invece COALESCE(COUNT(),0).