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

¿Las funciones agregadas de MySQL siempre devuelven una sola fila?

Debe usar GROUP BY como tal para obtener el resultado deseado:

SELECT
order_id,
part_id,
SUM(cost) AS total
FROM orders 
WHERE order_date BETWEEN xxx AND yyy
GROUP BY order_id, part_id

Esto agrupará sus resultados. Tenga en cuenta que dado que asumo que order_id y part_id es un PK compuesto, SUM(cost) en el anterior probablemente será = cost (ya que usted es una agrupación por una combinación de dos campos que está garantizado que es único. La subconsulta correlacionada a continuación superará esta limitación).

Cualquier fila no agregada recuperada debe especificarse en GROUP BY fila.

Para más información, puedes leer un tutorial sobre GROUP BY aquí:

EDITAR: Si desea usar una columna como agregada y no agregada, o si necesita desagregar sus grupos, deberá usar una subconsulta como tal:

SELECT
or1.order_id,
or1.cost,
or1.part_id,
(
  SELECT SUM(cost)
  FROM orders or2
  WHERE or1.order_id = or2.order_id
  GROUP BY or2.order_id
) AS total
FROM orders or1
WHERE or1.order_date BETWEEN xxx AND yyy