sql >> Base de Datos >  >> RDS >> Mysql

Múltiples conteos dentro de una sola consulta SQL

La respuesta de @VoteyDisciple va por buen camino, pero su consulta necesita algunas mejoras:

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;

Explicaciones:

  • El IF() las expresiones son redundantes porque la igualdad ya devuelve 1 o 0.
  • Tome el ts1.section_id=1 fuera de la condición de unión, o nunca obtendrá el otro section_id valores.
  • Agrupar por c.id solamente. Supongo que el OP solo quiere una fila por categoría y columnas para los recuentos de cada section_id valor para la categoría respectiva. Si la consulta está agrupada por c.id, ts1.section_id , entonces habría hasta cuatro filas por categoría.
  • Mueva las comas en la lista de selección. Las comas que flotan al comienzo de la línea se ven feas.;-)