Группировка с суммой не возвращает правильный результат - PullRequest
0 голосов
/ 12 декабря 2018

Допустим, таблица имеет следующую схему:

grp   |   number
1     |     10    
1     |     10    
1     |     10    
2     |     30    
2     |     30    
3     |     20  

Обратите внимание, что у каждого уникального grp есть уникальный номер, даже если их больше 1 grp.Я рассчитываю суммировать все числа для каждой уникальной группы.

Итак, я хочу сгруппировать таблицу по группам, чтобы получить:

grp   |   number
1     |     10    
2     |     30    
3     |     20  

И затем получить сумму, которая сейчас равна 60, но без группировки это дает мне 110, поскольку он вычисляет сумму всего без группировки.Все в одном запросе, без подзапросов, если это возможно.

Я пытался сделать следующее:

SELECT sum(number) as f
FROM ...
WHERE ...
GROUP BY grp

Но это не работает, он возвращает несколько результатов, а не единственный результат суммы.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Вы можете использовать подзапрос, чтобы выбрать уникальные записи и сделать sum:

select sum(number)
from (select distinct grp, number
      from table t
     ) t;
0 голосов
/ 12 декабря 2018

Если вы группируете по группе, то вы получите один результат для каждой группы.И это не будет учитывать тот факт, что вы хотите использовать значение из каждой группы только один раз.

Чтобы получить желаемый результат, взяв по одной строке из каждой группы, сначала нужно выполнить подзапрос, выбравОТЛИЧАЙТЕ комбинацию групп / номеров из таблицы, а затем СУММИТЕ, что.

SELECT 
  sum(`number`) as f
FROM 
  (SELECT DISTINCT `grp`, `number` FROM table1) g

Это выдаст 60.

Демо: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=8a3b346041731a4b4c85f4e151c10f70

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...