Wiele zliczeń w jednym zapytaniu SQL
Próbuję uzyskać liczbę dokumentów w 4 określonych sekcjach przy użyciu następującego kodu:
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
Tabela „kategoria” miała identyfikator, tytuł itp. Tabela „category_link_section” zawiera powiązania id między id_kategorii, id_sekcji i id_id.
Jeśli liczba wynosi 0 dla dowolnej kolumny, wyświetla się 0 w tej kolumnie. Ale jeśli wynik nie jest równy 0, pokazuje wynik mnożenia wszystkich wyników sekcji. Więc jeśli moje 4 kolumny liczące miały powrócić: 1, 2, 0, 3; w rzeczywistości pokaże 6, 6, 0, 6;
Jeśli użyję następującego kodu dla każdej konkretnej kategorii, otrzymam żądane wyniki:
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
ale za każdym razem muszę przechodzić przez bazę danych dla każdej sekcji.
Moje pytanie brzmi: czy muszę przechodzić i wywoływać po kolei każdą sekcję, konstruując tabelę poza SQL, czy można to zrobić w jednym zapytaniu?