U moet GROUP BY
gebruiken
als zodanig om het gewenste resultaat te krijgen:
SELECT
order_id,
part_id,
SUM(cost) AS total
FROM orders
WHERE order_date BETWEEN xxx AND yyy
GROUP BY order_id, part_id
Hiermee worden uw resultaten gegroepeerd. Merk op dat aangezien ik aanneem dat order_id
en part_id
is een samengestelde PK, SUM(cost)
in het bovenstaande zal waarschijnlijk = cost
. zijn (aangezien u een groepering maakt door een combinatie van twee velden die gegarandeerd uniek is. De gecorreleerde subquery hieronder zal deze beperking overwinnen).
Alle niet-geaggregeerde rijen die worden opgehaald, moeten worden opgegeven in de GROUP BY
rij.
Voor meer informatie kun je een tutorial lezen over GROUP BY
hier:
BEWERKEN: Als u een kolom zowel geaggregeerd als niet-geaggregeerd wilt gebruiken, of als u uw groepen wilt desegregeren, moet u een subquery als zodanig gebruiken:
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