Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL:Selecionando a contagem de várias tabelas


O problema é matemática com nulos e ordenação com nulos (verifique a opção "NULLS LAST" para substituir a ordenação padrão que retorna os nulos primeiro para uma ordem decrescente).

No seu caso, com as associações externas, se o usuário tiver uma tonelada de comentários no artigo, mas nenhum comentário no fórum, bem, 100 + null =null no Oracle math. Então, para fazer a matemática funcionar, você precisa fazer null =0. É aí que entra o NVL() (e também tem o bom efeito colateral de eliminar nulos irritantes do seu conjunto de resultados)!
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

Vejo que você tem MySQL e Oracle em suas tags - o acima é para Oracle. Se para MYSQL, use COALESCE(COUNT(),0) em vez disso.