sql >> Databasteknik >  >> RDS >> Mysql

Mysql COUNT(*) på flera tabeller

Genom att använda underval kan du göra:

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

Men var försiktig eftersom detta är en dyr fråga när kurser har många rader.

EDIT: Om dina tabeller är ganska stora bör följande fråga fungera mycket bättre (till förmån för att vara mer komplex att läsa och förstå).

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. Problem med UTF-8-tecken; det jag ser är inte det jag har lagrat

  2. Hur man formaterar SQLite-resultat som en tabell

  3. Hur man skriver en SQL-fråga med dynamisk LIMIT

  4. 8 sätt att lägga till mikrosekunder till ett Datetime-värde i MariaDB