В MySql нельзя действительно доверять результатам агрегатной функции, такой как SUM, когда вы используете DISTINCT.
Потому что с DISTINCT он фактически не группируется по другим столбцам.
Обратите внимание, что в других базах данных, кроме MySql и родственников, такой путаницы не возникнет Потому что они будут жаловаться на поля, пропущенные в GROUP BY.
Чтобы объяснить это более наглядно.
С этим примером данных (MySql):
drop table if exists tmp_table;
create temporary table tmp_table (col1 int, col2 char(1), col3 int);
insert into tmp_table (col1, col2, col3) values
(1,'A',1),(2,'A',2),(3,'A',3),
(4,'B',4),(5,'B',5),(6,'B',6);
Через DISTINCT и SUM:
select distinct col2, sum(col3) from tmp_table;
Возвращает:
col2 sum(col3)
---- ---------
A 21
Через GROUP BY:
select col2, sum(col3) from tmp_table group by col2;
Возвращает:
col2 sum(col3)
---- ---------
A 6
B 15
Тогда, когда мы включим в эти запросы предложение HAVING
... having sum(col3) > 10;
Тогда первый выбор вернет неправильный результат: ('A',21)
И второй выбор вернет то, что вы ожидаете: ('B',15)