sql >> Database teknologi >  >> RDS >> Mysql

Flere tæller inden for en enkelt SQL-forespørgsel

@VoteyDisciples svar er på rette vej, men hans forespørgsel har brug for nogle forbedringer:

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;

Forklaringer:

  • IF() udtryk er overflødige, fordi lighed allerede returnerer 1 eller 0.
  • Tag ts1.section_id=1 ud af join-betingelsen, ellers får du aldrig den anden section_id værdier.
  • Gruppér efter c.id kun. Jeg antager, at OP kun ønsker en række pr. kategori og kolonner for tællinger af hver section_id værdi for den respektive kategori. Hvis forespørgslen er grupperet efter c.id, ts1.section_id , så ville der være op til fire rækker pr. kategori.
  • Flyt kommaerne i valglisten. Kommaer, der svæver i begyndelsen af ​​linjen, ser grimme ud.;-)


  1. Kan jeg lave en atomic MERGE i Oracle?

  2. Få den rigtige del af en streng i SQL Server (T-SQL)

  3. Hvordan synkroniseres Mysql til Bigquery i realtid?

  4. SQL Server:dynamisk pivot over 5 kolonner