Mysql
 sql >> база данни >  >> RDS >> Mysql

Множество преброявания в рамките на една SQL заявка

отговор на @VoteyDisciple е на прав път, но заявката му се нуждае от някои подобрения:

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;

Обяснения:

  • IF() изразите са излишни, защото равенството вече връща 1 или 0.
  • Вземете ts1.section_id=1 извън условието за присъединяване или никога няма да получите другия section_id стойности.
  • Групиране по c.id само. Предполагам, че OP иска само един ред за категория и колони за броя на всеки section_id стойност за съответната категория. Ако заявката е групирана по c.id, ts1.section_id , тогава ще има до четири реда на категория.
  • Преместете запетаите в списъка за избор. Плаващите запетаи в началото на реда изглеждат грозни.;-)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. съвпадение на цели думи, като същевременно игнорира афиксите на думи, използвайки регулярен израз

  2. mysql - колоната не може да бъде нула

  3. Синхронизиране на данни между MySQL и MongoDB

  4. Логически оператор И в mySql REGEXP?

  5. Как да наблюдавам моя MySQL сървър за репликация?