En repartant sur la requête, elle n'est pas viable. Ce qui doit fausser les résultats.
En effet, dans une requête qui fait des calculs sur des données, il y a deux type de données dans le select, celles sur lesquels portent les calculs (SUM(nbr_pieces*quantite_par_piece) as somme) et celle qui permettent de définir des regroupement pour ces résultats.
Pour le deuxième type de données il y a deux cas. Il n'y a qu'un niveau de regroupement (la somme des mouvements pour un article, la moyenne des ventes pour un mois...), soit il y a plusieurs résultats (la moyenne des ventes pour un mois par articles).
A priori, dans ta requête (ce qui ne m'a pas mis immédiatement la puce à l’œil) il n'y a qu'un résultat attendu. En réalité, il semblerait qu'il y en aie plusieurs. En effet, la requête et sa condition laissent entendre que tu veux récupérer la somme pour un package donné et une unité donnée, hors dans le select, tu récupères le détail des nombres de pièces et des quantités (note que le package et l'unité, bien que récupéré, comme ils sont unique par les conditions, ne posent pas de problèmes). Par contre, les deux autres données sont différentes pour chaque lignes (peuvent l'être du moins) et doivent donc faire partie d'un regroupement ( groupBy() ), ce qui donnerait pour résultat "la somme pour un package et une unité par nombre de pièces et par quantité, ce qui n'a pas de sens sémantique.
Retire ces deux données de la requête. Ou ré exprime correctement la requête.