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?

questionAnswers(2)

yourAnswerToTheQuestion