sql >> Databáze >  >> RDS >> Mysql

Mysql COUNT(*) na více tabulkách

Pomocí dílčích výběrů můžete:

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

Ale buďte opatrní, protože toto je drahý dotaz, když kurzy mají mnoho řádků.

UPRAVIT: Pokud jsou vaše tabulky poměrně velké, měl by následující dotaz fungovat mnohem lépe (ve prospěch složitějšího čtení a porozumění).

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. PostgreSQL vs MySQL, srovnání

  2. Jak zajistit, aby rozšíření nebylo přemístitelné?

  3. Proveďte více dotazů v jediném příkazu Oracle v C#

  4. Chyba poskytovatele pojmenovaných kanálů poskytovatele 40 nemohla otevřít připojení k chybě serveru SQL Server 2