У меня есть SQL-запрос, который объединяет несколько таблиц, которые производят дубликаты в двух строках.Я использую ключевое слово DISTINCT
для устранения дубликатов:
SELECT DISTINCT
o.day as day,
g.id AS id,
g.name AS name,
o.num AS num,
o.version as version
FROM
table_one o
INNER JOIN table_two t ON
o.ID = t.ID
INNER JOIN table_three g ON
t.ID = g.ID
INNER JOIN table_four gs ON
g.ID = gs.ID
AND
INNER JOIN table_five s ON
gs.ID = s.ID
INNER JOIN table_six z ON
s.ID = z.ID
INNER JOIN table_seven bg ON
bg.ID = g.ID;
Возвращает две строки так, как мне хотелось бы, иначе я бы увидел дубликаты, если бы не использовал DISTINCT
:
1/2/19, 5, first, 25, 1
1/5/19, 7, second, 20, 1
Если я удаляю DISTINCT
, то две строки дублируются, давая мне четыре строки:
1/2/19, 5, first, 25, 1
1/2/19, 5, first, 25, 1
1/5/19, 7, second, 20, 1
1/5/19, 7, second, 20, 1
Поэтому моя конечная цель - использовать функцию GROUP BY
, чтобы я мог сложитьмое поле o.num
и сгруппируйте их по остальным полям.Если я добавлю функцию GROUP BY
к вышеуказанному запросу следующим образом:
SELECT DISTINCT
o.day as day,
g.id AS id,
g.name AS name,
SUM(o.num) AS num,
o.version as version
FROM
table_one o
INNER JOIN table_two t ON
o.ID = t.ID
INNER JOIN table_three g ON
t.ID = g.ID
INNER JOIN table_four gs ON
g.ID = gs.ID
AND
INNER JOIN table_five s ON
gs.ID = s.ID
INNER JOIN table_six z ON
s.ID = z.ID
INNER JOIN table_seven bg ON
bg.ID = g.ID
GROUP BY
o.day as day,
g.id AS id,
g.name AS name,
o.version as version;
Я получу две строки назад, но сумма o.num
удвоится (по сути, выполняя GROUP BY
без DISTINCT
:
1/2/19, 5, first, 50, 1
1/5/19, 7, second, 40, 1
ПРИМЕЧАНИЕ. Возможно, вам интересно, почему я пытаюсь использовать GROUP BY
, когда получаю требуемые результаты с первым запросом. Я включил только строки, которые дублируются. По какой-то причиневсе остальные строки не видят этого поведения. Есть ли способ заставить GROUP BY
и DISTINCT
работать вместе?