Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wiele zliczeń w jednym zapytaniu SQL

odpowiedź @VoteyDisciple jest na dobrej drodze, ale jego zapytanie wymaga pewnych ulepszeń:

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;

Wyjaśnienia:

  • IF() wyrażenia są zbędne, ponieważ równość już zwraca 1 lub 0.
  • Weź ts1.section_id=1 z warunku dołączenia lub nigdy nie dostaniesz drugiego section_id wartości.
  • Grupuj według c.id tylko. Zakładam, że OP chce tylko jednego wiersza na kategorię i kolumn dla liczebności każdego section_id wartość dla odpowiedniej kategorii. Jeśli zapytanie pogrupowane według c.id, ts1.section_id , wtedy w każdej kategorii byłyby maksymalnie cztery wiersze.
  • Przenieś przecinki na liście wyboru. Przecinki pływające na początku linii wyglądają brzydko.;-)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak drukować posty i komentarze za pomocą tylko jednego zapytania sql

  2. php mysql Grupuj według, aby uzyskać najnowszy rekord, a nie pierwszy rekord

  3. Naruszenie ograniczeń przy utrzymywaniu relacji jeden do wielu

  4. Jak mogę ograniczyć użytkownika MySQL do określonych tabel?

  5. Grupuj MySQL według kolejnych wystąpień