Подсчет дубликатов при использовании оператора «IN» - PullRequest
0 голосов
/ 20 февраля 2020

Я думаю, что я сузил свой запрос до простого для понимания примера:

SELECT SUM(cost) FROM tableX WHERE prod_id IN 
(SELECT prod_id FROM tableY WHERE val = 7)

Моя проблема заключается в следующем - иногда один и тот же prod_id будет возвращаться несколько раз. Но из-за природы оператора «IN» он будет учитываться только один раз функцией «SUM (стоимость)». Каков наилучший способ справиться с этим? Спасибо!

Ответы [ 3 ]

2 голосов
/ 20 февраля 2020

Я не проверил это, но не вижу причины, по которой это не сработает:

SELECT SUM(cost)
FROM tableX
INNER JOIN tableY ON tableX.prod_id = tableY.prod_id AND tableY.val = 7
0 голосов
/ 20 февраля 2020

Использование объединения вместо IN гарантирует, что каждый элемент x будет учитываться столько раз, сколько существует записей в y:

SELECT SUM(cost)
FROM tableX x
JOIN tableY y ON x.prod_id = y.prod_id AND val = 7

Обратите внимание, что этот подход работает только в ситуации, когда вы не хотите получать какие-либо другие столбцы из x. Если это не так, вам нужно сгруппировать по дополнительным столбцам, которые вы sh вернете:

SELECT x.prod_id, x.name, SUM(cost), COUNT(*)
FROM tableX x
JOIN tableY y ON x.prod_id = y.prod_id AND val = 7
GROUP BY x.prod_id, x.name
0 голосов
/ 20 февраля 2020

У меня есть догадка, что вам просто нужно сгруппировать по продукту.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...