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

Più conteggi all'interno di una singola query SQL

risposta di @VoteyDisciple è sulla buona strada, ma la sua domanda necessita di alcuni miglioramenti:

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;

Spiegazioni:

  • Il IF() le espressioni sono ridondanti perché l'uguaglianza restituisce già 1 o 0.
  • Prendi ts1.section_id=1 fuori dalla condizione di unione, o non otterrai mai l'altro section_id valori.
  • Raggruppa per c.id solo. Presumo che l'OP desideri solo una riga per categoria e colonne per i conteggi di ogni section_id valore per la rispettiva categoria. Se la query è raggruppata per c.id, ts1.section_id , ci sarebbero fino a quattro righe per categoria.
  • Sposta le virgole nell'elenco di selezione. Le virgole che fluttuano all'inizio della riga sembrano brutte.;-)