Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql COUNT(*) на множество таблици

С помощта на подселекции можете да направите:

SELECT co.*, 
    (SELECT COUNT(*) FROM modules mod WHERE mod.course_id=co.id) AS moduleCount, 
    (SELECT COUNT(*) FROM videos vid WHERE vid.course_id=co.id) AS vidCount
FROM courses AS co
ORDER BY co.id DESC

Но бъдете внимателни, тъй като това е скъпа заявка, когато курсовете имат много редове.

РЕДАКТИРАНЕ: Ако вашите таблици са доста големи, следната заявка би трябвало да работи много по-добре (в полза на това да бъде по-сложна за четене и разбиране).

SELECT co.*, 
    COALESCE(mod.moduleCount,0) AS moduleCount,
    COALESCE(vid.vidCount,0) AS vidCount
FROM courses AS co
    LEFT JOIN (
            SELECT COUNT(*) AS moduleCount, course_id AS courseId 
            FROM modules
            GROUP BY course_id
        ) AS mod
        ON mod.courseId = co.id
    LEFT JOIN (
            SELECT COUNT(*) AS vidCount, course_id AS courseId 
            FROM videos
            GROUP BY course_id
        ) AS vid
        ON vid.courseId = co.id
ORDER BY co.id DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Snow Leopard + Ruby 1.9.1 + MySQL Gem =Огромни проблеми

  2. Автоматично мащабиране с Amazon Aurora без сървър

  3. MySQL group_concat_max_len в заявка

  4. MySQL JDBC драйвер 5.1.33 – Проблем с часовата зона

  5. Проверка за максимална продължителност на последователни дни, които отговарят на определено условие