Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL:Wybieranie liczby wielu tabel

Problemem jest matematyka z wartościami null i porządkowanie z wartościami null (zaznacz opcję „NULLS LAST” w celu nadpisania domyślnej kolejności, która zwraca null jako pierwsza dla kolejności malejącej).

W twoim przypadku, z zewnętrznymi sprzężeniami, jeśli użytkownik ma mnóstwo komentarzy do artykułów, ale nie ma komentarzy na forum, cóż, 100 + null =null w matematyce Oracle. Aby matematyka działała, musisz ustawić null=0. W tym miejscu pojawia się NVL() (i ma również przyjemny efekt uboczny polegający na wyeliminowaniu nieznośnych wartości zerowych z zestawu wyników)!

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

Widzę, że masz w swoich tagach zarówno MySQL, jak i Oracle - powyższe dotyczy Oracle. Jeśli dla MYSQL użyj zamiast tego COALESCE(COUNT(),0).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Php-MySql Bezpieczeństwo podczas WSTAWIANIA DO MySql i pobierania z MySql na ekran

  2. Jaka jest różnica między typami danych kolumn MySQL BOOL i BOOLEAN?

  3. grupuj według pierwszego i ostatniego wystąpienia

  4. aws - ec2 - mysql - zatrzymanie instancji, ponowne uruchomienie - zmiana haseł innych użytkowników

  5. Jak mogę powtórzyć identyfikator zasobu #6 z odpowiedzi MySql w PHP?