Estou tentando encontrar uma consulta MySQL que encontre valores DISTINCT em um campo específico, conte o número de ocorrências desse valor e ordene os resultados pela contagem.
exemplo db
id name
----- ------
1 Mark
2 Mike
3 Paul
4 Mike
5 Mike
6 John
7 Mark
resultado esperado
name count
----- -----
Mike 3
Mark 2
Paul 1
John 1
count(*) > 1
inserir umawhere
cláusula em uma , porque é uma função agregada. Você também recebe uma mensagem muito inútil: "Uso inválido da função de grupo". O caminho certo é aliás a contagemname,COUNT(*) as cnt
e adicionar uma cláusula tendo assim:HAVING count > 1
.HAVING
é para condições que devem ser aplicadas após a agregação, enquantoWHERE
para condições que devem ser aplicadas antes dela. (Outra maneira de pensar sobre isso é queWHERE
se aplica aos dados da linha original;HAVING
aplica-se aos dados da linha de saída.) #Que tal algo assim:
Você está selecionando o nome e o número de vezes que aparece, mas agrupando por nome para que cada nome seja selecionado apenas uma vez.
Por fim, você ordena pelo número de vezes em ordem decrescente, para que os usuários que aparecem com mais frequência sejam os primeiros.
fonte
SELECT COUNT(DISTINCT name) as count FROM your_table
Para uma contagem do total de linhas da tabela, faça a consulta de Pascal sem agroup by
instruçãoAlterou COUNT (*) de Amber para COUNT (1) para obter um melhor desempenho.
fonte