Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Várias contagens em uma única consulta SQL


resposta do @VoteyDisciple está no caminho certo, mas sua consulta precisa de algumas melhorias:
SELECT c.id, c.title,
    SUM(ts1.section_id = 1) AS doc1,
    SUM(ts1.section_id = 2) AS doc2,
    SUM(ts1.section_id = 3) AS doc3,
    SUM(ts1.section_id = 4) AS doc4
FROM category AS c
  LEFT JOIN category_link_section AS ts1
    ON (c.id = ts1.category_id)
GROUP BY c.id;

Explicações:
  • O IF() expressões são redundantes porque a igualdade já retorna 1 ou 0.
  • Pegue o ts1.section_id=1 fora da condição de junção, ou você nunca obterá o outro section_id valores.
  • Agrupar por c.id só. Suponho que o OP queira apenas uma linha por categoria e colunas para contagens de cada section_id valor para a respectiva categoria. Se a consulta for agrupada por c.id, ts1.section_id , haveria até quatro linhas por categoria.
  • Mova as vírgulas na lista de seleção. Vírgulas flutuando no início da linha parecem feias.;-)