Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL:Auswählen der Anzahl mehrerer Tabellen

Das Problem ist Mathematik mit Nullen und Sortieren mit Nullen (überprüfen Sie die Option "NULLS LAST", um die Standardreihenfolge zu überschreiben, die die Nullen zuerst für eine absteigende Reihenfolge zurückgibt).

In Ihrem Fall mit den äußeren Verknüpfungen, wenn der Benutzer eine Menge Artikelkommentare, aber keine Forumskommentare hat, na ja, 100 + null =null in Oracle-Mathematik. Damit die Mathematik funktioniert, müssen Sie also null =0 machen. Hier kommt NVL() ins Spiel (und hat auch den netten Nebeneffekt, lästige Nullen aus Ihrer Ergebnismenge zu entfernen)!

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

Wie ich sehe, haben Sie sowohl MySQL als auch Oracle in Ihren Tags - das Obige gilt für Oracle. Verwenden Sie für MYSQL stattdessen COALESCE(COUNT(),0).