sql >> Database >  >> RDS >> Mysql

Mysql COUNT(*) op meerdere tabellen

Met behulp van subselecties kunt u het volgende doen:

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

Maar wees voorzichtig, want dit is een dure vraag wanneer cursussen veel rijen hebben.

BEWERKEN: Als uw tabellen vrij groot zijn, zou de volgende query veel beter moeten presteren (in plaats van complexer te zijn om te lezen en te begrijpen).

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. MySQL-gebruikersbeheer

  2. sql-server Bulk csv invoegen met gegevens met komma

  3. ORA-22905 - bij het opvragen van een tabeltype met een select-instructie

  4. Aankondiging van de algemene beschikbaarheid van SQL Compliance Manager 5.9