Mysql
 sql >> Database >  >> RDS >> Mysql

Le funzioni MySQL aggregate restituiscono sempre una singola riga?

Devi usare GROUP BY come tale per ottenere il risultato desiderato:

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

Questo raggrupperà i tuoi risultati. Nota che poiché presumo che order_id e part_id è un PK composto, SUM(cost) in quanto sopra sarà probabilmente = cost (poiché un raggruppamento in base a una combinazione di due campi che è garantito essere unico. La sottoquery correlata di seguito supererà questa limitazione).

Eventuali righe non aggregate recuperate devono essere specificate in GROUP BY riga.

Per ulteriori informazioni, puoi leggere un tutorial su GROUP BY qui:

MODIFICA: Se desideri utilizzare una colonna sia come aggregata che non aggregata, o se devi desegregare i tuoi gruppi, dovrai utilizzare una sottoquery in quanto tale:

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