Здесь у вас есть решение без использования JOIN
s, оно имеет лучшую производительность, чем другой ответ, который использует много JOIN
s:
select @rn := 1, @sectionLag := 0;
select id, section, count from (
select id,
case when @sectionLag = section then @rn := @rn + 1 else @rn := 1 end rn,
@sectionLag := section,
section,
count
from (
select id, section, sum(count) count
from matrix m
join products p on m.product = p.id
group by id, section
) a order by section, count desc
) a where rn = 1
Переменные в начале используются для имитации оконных функций (LAG
и ROW_NUMBER
), которые доступны в MySQL 8.0 или выше (если вы используете такую версию, дайте мне знать, поэтому я предоставлю вам решение также с оконными функциями).
DEMO
Еще одна демонстрация , где вы можете сравнить производительность моего и другого запроса. Он содержит ~ 20 тыс. Строк, и мой запрос имеет тенденцию быть почти в 2 раза быстрее.