Это работает в более поздней версии MySql:
with
grp as (
select d.section, d.id, sum(i.importance) imp
from docs d inner join docs_importance i
on i.doc_id = d.id
group by d.section, d.id
),
cte as (
select grp.id, grp.section, grp.imp
from grp inner join (
select section, max(imp) maximp
from grp
group by section
) t on t.section = grp.section and t.maximp = grp.imp
)
select d.id, d.section, d.rev, cte.imp importance
from docs d inner join cte
on cte.id = d.id and cte.section = d.section
См. Демоверсию Результаты:
| id | section | rev | importance |
| --- | ------- | --- | ---------- |
| 2 | 1 | b | 6 |
| 3 | 2 | c | 9 |
| 5 | 3 | e | 6 |
Для более старых версий:
select d.id, d.section, d.rev, cte.imp importance
from docs d inner join (
select grp.id, grp.section, grp.imp
from (
select d.section, d.id, sum(i.importance) imp
from docs d inner join docs_importance i
on i.doc_id = d.id
group by d.section, d.id
) grp inner join (
select section, max(imp) maximp
from (
select d.section, d.id, sum(i.importance) imp
from docs d inner join docs_importance i
on i.doc_id = d.id
group by d.section, d.id
)grp
group by section
) t on t.section = grp.section and t.maximp = grp.imp
)cte
on cte.id = d.id and cte.section = d.section
См. Демоверсию