sql >> Base de Datos >  >> RDS >> Mysql

SQL:seleccionando el recuento de varias tablas

El problema son las matemáticas con nulos y el orden con nulos (verifique la opción "NULOS ÚLTIMO" para anular el orden predeterminado que devuelve los nulos primero para un orden descendente).

En su caso, con las uniones externas, si el usuario tiene muchos comentarios de artículos pero no comentarios de foros, bueno, 100 + nulo =nulo en matemáticas de Oracle. Entonces, para que las matemáticas funcionen, debe hacer nulo =0. ¡Ahí es donde entra NVL() (y también tiene el agradable efecto secundario de eliminar los molestos valores nulos de su 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

Veo que tiene MySQL y Oracle en sus etiquetas; lo anterior es para Oracle. Si para MYSQL usa COALESCE(COUNT(),0) en su lugar.