Múltiples cuentas dentro de una sola consulta SQL
Estoy tratando de obtener el número de documentos dentro de 4 secciones específicas usando el siguiente código:
SELECT
category.id
, category.title
, count(ts1.section_id) AS doc1
, count(ts2.section_id) AS doc2
, count(ts3.section_id) AS doc3
, count(ts4.section_id) AS doc4
FROM
category
LEFT JOIN category_link_section AS ts1
ON (category.id = ts1.category_id AND ts1.section_id = 1)
LEFT JOIN category_link_section AS ts2
ON (category.id = ts2.category_id AND ts2.section_id = 2)
LEFT JOIN category_link_section AS ts3
ON (category.id = ts3.category_id AND ts3.section_id = 3)
LEFT JOIN category_link_section AS ts4
ON (category.id = ts4.category_id AND ts4.section_id = 4)
GROUP BY category.id, ts1.section_id, ts2.section_id, ts3.section_id, ts4.section_id
La tabla 'categoría' tenía un ID, título, etc. La tabla 'category_link_section' contiene vínculos de ID entre category_id, section_id y doc_id.
Si el recuento es 0 para cualquier columna, muestra 0 en esa columna. Pero si el resultado no es 0, muestra el resultado de la multiplicación de todos los resultados de la sección. Entonces, si mis 4 columnas de columnas debían regresar: 1, 2, 0, 3; En realidad mostraría 6, 6, 0, 6;
Si utilizo este código siguiente para cada categoría específica, obtengo los resultados que deseo:
SELECT
category.id
, category.title
, count(ts1.section_id) AS doc1
FROM
category
LEFT JOIN category_link_section AS ts1
ON (category.id = ts1.category_id AND ts1.section_id = 1)
GROUP BY category.id, ts1.section_id
pero luego necesito recorrer la base de datos cada vez para cada sección.
Entonces, mi pregunta es, ¿debo pasar por cada sección y llamarlas, construir mi tabla fuera del SQL, o se puede hacer esto en una sola consulta?