Je pense que j'ai réduit ma requête à un exemple facile à comprendre ici: mon problème est-ce - Parfois, le même produit sera retourné plusieurs fois. Mais à cause de la nature de l'opérateur "In", il ne serait compté qu'une fois par la fonction "somme (coût)". Quelle est la meilleure façon de gérer cela? Merci! P> p>
3 Réponses :
J'ai un hunch que vous avez juste besoin de grouper par le produit.
SELECT prod_id, SUM(cost) AS TotalCost
FROM tableX
WHERE prod_id IN (
SELECT DISTINCT prod_id
FROM tableY
WHERE val = 7
)
GROUP BY prod_id
Je ne l'ai pas vérifié, mais je ne vois pas une raison pour laquelle cela ne fonctionnera pas:
SELECT SUM(cost) FROM tableX INNER JOIN tableY ON tableX.prod_id = tableY.prod_id AND tableY.val = 7
Ça l'a fait. Ce n'était pas tout à fait une traduction directe à mon étui d'utilisation spécifique (où la tabley était un ensemble complexe de sous-requêtes) ... mais il a répondu à la question comme demandé et m'a dirigé dans la bonne direction pour une solution. Merci!
Utilisation d'une jointure au lieu de Notez que cette approche ne fonctionne que dans des situations lorsque vous ne souhaitez pas récupérer d'autres colonnes de dans code> s'assurera que chaque article x code> serait compté autant de fois que des enregistrements dans le y code>: < Pré> xxx pré> x code>. Si ce n'est pas le cas, vous auriez besoin de regrouper sur les colonnes supplémentaires que vous souhaitez revenir: p>
S'il vous plaît fournir des données de base? Vous pouvez l'écrire ici: SQLFIDDLE.COM/#!7
Utilisez non
dans code> mais la jointure internecode> à la place.Vous pouvez également appliquer
distinct code> à prod_id dans la requête intérieure(1) Votre requête ne renvoie pas
prod_id code>, de sorte que votre observation n'a pas de sens. (2) Votre requête revient exactement une rangée, donc il n'y a pas de doublons. Votre question n'est pas claire.@Gordonlinoff 1) Cela fait beaucoup de sens: imaginez que l'une est la liste des transactions. L'autre est la liste de description du produit. Si vous avez vendu le produit
val = 7 code> deux fois, vous vous attendez à ce que le montant total soit comptabilisé deux fois.@Gordonlinoff 2) Les doublons sont dans la requête interne
@zerkms. . .
dans code> implicitement déduit les résultats. En fait, en général, unoù la clause code> ne peut augmenter le nombre de lignes en cours de traitement.@Gordonlinoff C'est vrai, et c'est tout le sujet de la question: ils doivent somme code> autant de fois que la requête interne renvoie la valeur correspondante.
@zerkms. . . J'ai mal interprété la question. Vous avez la bonne réponse.