Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comptes multiples dans une seule requête SQL

réponse de @VoteyDisciple est sur la bonne voie, mais sa requête nécessite quelques améliorations :

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;

Explications :

  • Le IF() les expressions sont redondantes car l'égalité renvoie déjà 1 ou 0.
  • Prenez le ts1.section_id=1 hors de la condition de jointure, ou vous n'obtiendrez jamais l'autre section_id valeurs.
  • Regrouper par c.id seulement. Je suppose que l'OP ne veut qu'une ligne par catégorie et des colonnes pour le nombre de chaque section_id valeur pour la catégorie respective. Si la requête est regroupée par c.id, ts1.section_id , il y aurait alors jusqu'à quatre lignes par catégorie.
  • Déplacez les virgules dans la liste de sélection. Les virgules flottant au début de la ligne ont l'air moche.;-)