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