Sie müssen GROUP BY
verwenden
als solches, um das gewünschte Ergebnis zu erhalten:
SELECT
order_id,
part_id,
SUM(cost) AS total
FROM orders
WHERE order_date BETWEEN xxx AND yyy
GROUP BY order_id, part_id
Dadurch werden Ihre Ergebnisse gruppiert. Beachten Sie, dass, da ich diese order_id
annehme und part_id
ist ein zusammengesetzter PK, SUM(cost)
oben steht wahrscheinlich = cost
(da Sie eine Gruppierung durch eine Kombination von zwei Feldern haben, die garantiert eindeutig ist. Die korrelierte Unterabfrage unten wird diese Einschränkung überwinden).
Alle abgerufenen nicht aggregierten Zeilen müssen in GROUP BY
angegeben werden Zeile.
Weitere Informationen finden Sie in einem Tutorial zu GROUP BY
hier:
BEARBEITEN: Wenn Sie eine Spalte sowohl aggregiert als auch nicht aggregiert verwenden möchten oder Ihre Gruppen aufheben müssen, müssen Sie eine Unterabfrage als solche verwenden:
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