Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

As funções agregadas do MySQL sempre retornam uma única linha?


Você precisa usar GROUP BY como tal para obter o resultado desejado:
SELECT
order_id,
part_id,
SUM(cost) AS total
FROM orders 
WHERE order_date BETWEEN xxx AND yyy
GROUP BY order_id, part_id

Isso agrupará seus resultados. Observe que, como presumo que order_id e part_id é um PK composto, SUM(cost) acima provavelmente será = cost (uma vez que você agrupa por uma combinação de dois campos que é garantido ser único. A subconsulta correlacionada abaixo irá superar esta limitação).

Todas as linhas não agregadas buscadas precisam ser especificadas no GROUP BY fileira.

Para mais informações, você pode ler um tutorial sobre GROUP BY aqui:

EDITAR: Se você quiser usar uma coluna como agregada e não agregada, ou se precisar desagregar seus grupos, precisará usar uma subconsulta como esta:
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