Mysql
 sql >> Base de données >  >> RDS >> Mysql

Les fonctions MySQL agrégées renvoient-elles toujours une seule ligne ?

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