Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mehrere Zählungen innerhalb einer einzigen SQL-Abfrage

@VoteyDisciples Antwort ist auf dem richtigen Weg, aber seine Abfrage muss verbessert werden:

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;

Erläuterungen:

  • Das IF() Ausdrücke sind überflüssig, da Gleichheit bereits 1 oder 0 zurückgibt.
  • Nehmen Sie ts1.section_id=1 aus der Join-Bedingung, oder Sie erhalten nie die andere section_id Werte.
  • Gruppieren nach c.id nur. Ich nehme an, das OP möchte nur eine Zeile pro Kategorie und Spalten für die Anzahl jeder section_id Wert für die jeweilige Kategorie. Wenn die Abfrage nach c.id, ts1.section_id gruppiert ist , dann gäbe es bis zu vier Zeilen pro Kategorie.
  • Verschieben Sie die Kommas in der Auswahlliste. Schwebende Kommas am Anfang der Zeile sehen hässlich aus.;-)