Musisz użyć GROUP BY
jako takie, aby uzyskać pożądany wynik:
SELECT
order_id,
part_id,
SUM(cost) AS total
FROM orders
WHERE order_date BETWEEN xxx AND yyy
GROUP BY order_id, part_id
Spowoduje to zgrupowanie wyników. Zauważ, że ponieważ zakładam, że order_id
i part_id
jest złożonym PK, SUM(cost)
w powyższym prawdopodobnie będzie = cost
(ponieważ grupujesz przez kombinację dwóch pól, co gwarantuje unikalność. Skorelowane podzapytanie poniżej przezwycięży to ograniczenie).
Wszystkie pobrane wiersze nie zagregowane muszą być określone w GROUP BY
wiersz.
Aby uzyskać więcej informacji, możesz przeczytać samouczek o GROUP BY
tutaj:
EDYTUJ: Jeśli chcesz użyć kolumny zarówno jako zagregowanej, jak i niezagregowanej, lub jeśli chcesz desegregować swoje grupy, musisz użyć podzapytania jako takiego:
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