sql >> Databasteknik >  >> RDS >> Mysql

Flera räkningar inom en enda SQL-fråga

@VoteyDisciples svar är på rätt väg, men hans fråga behöver några förbättringar:

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;

Förklaringar:

  • IF() uttryck är överflödiga eftersom likhet redan returnerar 1 eller 0.
  • Ta ts1.section_id=1 ut ur joinvillkoret, annars får du aldrig det andra section_id värden.
  • Gruppera efter c.id endast. Jag antar att OP bara vill ha en rad per kategori och kolumner för räkningar av varje section_id värde för respektive kategori. Om frågan grupperas efter c.id, ts1.section_id , då skulle det finnas upp till fyra rader per kategori.
  • Flytta kommatecken i urvalslistan. Komma som svävar i början av raden ser fula ut.;-)


  1. Hur man exporterar stora mängder data med sql-utvecklare - Oracle

  2. Korrekt sätt att hålla poolade anslutningar vid liv (eller timeout och få nya) under längre inaktivitet för MySQL, Grails 2-appen

  3. Multi-Dimensional Array från matchande mysql-kolumner

  4. java.lang.ClassNotFoundException:com.mysql.jdbc.Driver (i jres libs)