sql >> Database >  >> RDS >> Mysql

SQL:aantal van meerdere tabellen selecteren

Het probleem is wiskunde met nulls en bestellen met nulls (check de optie "NULLS LAST" om de standaardvolgorde te overschrijven die de nulls eerst retourneert voor een aflopende volgorde).

In jouw geval, met de outer joins, als de gebruiker een heleboel artikelopmerkingen heeft maar geen forumopmerkingen, nou ja, 100 + null =null in Oracle-wiskunde. Dus om de wiskunde te laten werken, moet je null=0 maken. Dat is waar NVL() om de hoek komt kijken (en heeft ook het leuke neveneffect van het elimineren van vervelende nulls uit je resultatenset)!

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

Ik zie dat je zowel MySQL als Oracle in je tags hebt - het bovenstaande is voor Oracle. Als u voor MYSQL COALESCE(COUNT(),0) gebruikt.



  1. Hoe weet ik of bij gebruik van dubbele sleutelupdate een rij is ingevoegd of bijgewerkt?

  2. Meerdere checkbox-gegevens opslaan in MySQL-database met PHP

  3. Woocommerce krijgt product-ID met product-SKU

  4. Ruby on Rails:Is er een manier om items uit de database te halen en ze in een bepaalde volgorde terug te sturen?