select name, val
from (select name, val, max(occ)
from (select name, val, count(*) as occ
from `sample` group by name, val
order by occ desc) as groups
group by name) as maximums;
Наружный select
служит для обозначения c только для отображения name
и val
order by occ desc
служит для получения правильного val
Может быть достаточно следующего:
select name, val
from (select name, val, count(*) as occ
from `sample`
group by name, val
order by occ desc) as groups
group by name;
[edit]: Следующее сообщение не должно вызывать ошибку, поскольку оно не использует неагрегированный столбец и не полагается на order by
. Несколько name
строк могут существовать, если существует несколько максимумов для name/val
count.
select name,val
from (select name as maxname, max(occ) as maxocc
from (select name, val, count(*) as occ
from `sample`
group by name, val) as counts2
group by name) as maxs
join (select name, val, count(*) as numocc
from `sample`
group by name, val) as counts1
on name = maxname AND numocc = maxocc;