sql >> Database >  >> RDS >> Mysql

Meerdere tellingen binnen een enkele SQL-query

@VoteyDisciple's antwoord is op de goede weg, maar zijn vraag heeft wat verbeteringen nodig:

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;

Uitleg:

  • De IF() expressies zijn overbodig omdat gelijkheid al 1 of 0 retourneert.
  • Neem de ts1.section_id=1 uit de deelnamevoorwaarde, of je krijgt nooit de andere section_id waarden.
  • Groepeer op c.id enkel en alleen. Ik neem aan dat de OP slechts één rij per categorie wil, en kolommen voor het aantal van elke section_id waarde voor de betreffende categorie. Als de zoekopdracht is gegroepeerd op c.id, ts1.section_id , dan zijn er maximaal vier rijen per categorie.
  • Verplaats de komma's in de selectielijst. Komma's die aan het begin van de regel zweven, zien er lelijk uit.;-)


  1. Is er een Max-functie in SQL Server die twee waarden aanneemt, zoals Math.Max ​​in .NET?

  2. Fout bij het instellen van n_distinct met behulp van een plpgsql-variabele

  3. Receptendatabase, zoeken op ingrediënt

  4. Triggers gebruiken als alternatief voor SQL-aggregatiefuncties?