Vous devez utiliser GROUP BY
en tant que tel pour obtenir le résultat souhaité :
SELECT
order_id,
part_id,
SUM(cost) AS total
FROM orders
WHERE order_date BETWEEN xxx AND yyy
GROUP BY order_id, part_id
Cela regroupera vos résultats. Notez que puisque je suppose que order_id
et part_id
est un PK composé, SUM(cost)
dans ce qui précède sera probablement = cost
(puisque vous effectuez un regroupement par une combinaison de deux champs dont l'unicité est garantie. La sous-requête corrélée ci-dessous permettra de surmonter cette limitation).
Toutes les lignes non agrégées extraites doivent être spécifiées dans le GROUP BY
rangée.
Pour plus d'informations, vous pouvez lire un tutoriel sur GROUP BY
ici :
MODIF : Si vous souhaitez utiliser une colonne à la fois agrégée et non agrégée, ou si vous devez déségréger vos groupes, vous devrez utiliser une sous-requête en tant que telle :
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