Tente esta solução:
SELECT
a.product_group,
SUBSTRING_INDEX(GROUP_CONCAT(a.manufacturer ORDER BY a.occurrences DESC SEPARATOR ':::'), ':::', 1) AS manufacturer_mode
FROM
(
SELECT
aa.product_group,
aa.manufacturer,
COUNT(*) AS occurrences
FROM
products aa
GROUP BY
aa.product_group,
aa.manufacturer
) a
GROUP BY
a.product_group
Explicação:
Isso ainda usa uma forma de subconsulta, mas uma que é executada apenas uma vez, em oposição a uma que é executada linha por linha, como em seu exemplo original.
Ele funciona selecionando primeiro o
product_group id, o fabricante e a contagem de quantas vezes o fabricante aparece para cada grupo específico. O
FROM sub-selecionar ficará assim após a execução (apenas criando dados aqui):product_group | manufacturer | occurrences
---------------------------------------------------
1 | XYZ | 4
1 | Test | 2
1 | Singleton | 1
2 | Eloran | 2
2 | XYZ | 1
Agora que temos o resultado da sub-seleção, precisamos escolher a linha que tem o máximo nas
occurences campo para cada grupo de produtos. Na consulta externa, agrupamos a subseleção novamente pelo
product_group campo, mas desta vez, somente o product_group campo. Agora, quando fazemos nosso GROUP BY aqui, podemos usar uma função realmente atraente no MySQL chamada GROUP_CONCAT que podemos usar para concatenar os fabricantes juntos e na ordem que quisermos. ...GROUP_CONCAT(a.manufacturer ORDER BY a.occurrences DESC SEPARATOR ':::'...
O que estamos fazendo aqui é concatenar os fabricantes que estão agrupados por
product_group id, o ORDER BY a.occurrences DESC garante que o fabricante com mais aparições apareça primeiro na lista concatenada. Finalmente estamos separando cada fabricante com ::: . O resultado disso para product_group 1 vai parecer:XYZ:::Test:::Singleton
XYZ aparece primeiro pois tem o valor mais alto na occurance campo. Nós somente deseja selecionar XYZ , então encerramos a concatenação dentro de SUBSTRING_INDEX , o que nos permitirá escolher apenas o primeiro elemento da lista com base no ::: delimitador. O resultado final será:
product_group | manufacturer_mode
---------------------------------------
1 | XYZ
2 | Eloran