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

SQL:Valg af antal af flere tabeller

Problemet er matematik med nuller og bestilling med nuller (tjek ind i "NULLER SIDSTE" mulighed for at tilsidesætte standardrækkefølgen, som returnerer nullerne først for en faldende rækkefølge).

I dit tilfælde, med de ydre joinforbindelser, hvis brugeren har et væld af artikelkommentarer, men ingen forumkommentarer, ja, 100 + null =null i Oracle-matematik. Så for at få matematikken til at fungere, skal du lave null=0. Det er her, NVL() kommer ind (og har også den gode bivirkning at eliminere irriterende nulpunkter fra dit resultatsæt)!

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

Jeg kan se du har både MySQL og Oracle i dine tags - ovenstående er til Oracle. Hvis for MYSQL, brug COALESCE(COUNT(),0) i stedet.



  1. Blokerer '0000-00-00' fra MySQL-datofelter

  2. Opdater en anden tabel efter indsættelse ved hjælp af en trigger?

  3. Sådan låser du en række til valg i MySQL

  4. Sådan rapporteres en fejl fra en SQL Server brugerdefineret funktion