Ir para o conteúdo
skiller10

SQL - Obter moda

Mensagens Recomendadas

mjamado    47
mjamado

Isto deverá devolver-te a moda:

SELECT COUNT(*) AS ocorrencias
FROM tabela
GROUP BY campo
ORDER BY ocorrencias
LIMIT 1

Agora não tenho nenhuma plataforma de testes, mas usa o EXPLAIN - palpita-me que isto deverá pedir filesort e temporary. Se isto for uma operação que vais fazer de forma recorrente, talvez seja melhor "desnormalizar" a base de dados um bocadinho, e teres uma tabela à parte para registares o número de ocorrências por evento (depois é só pedires o registo com o número de ocorrências mais alto).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mjamado    47
mjamado

Tenho um erro na query (linha assinalada):

SELECT COUNT(*) AS ocorrencias
FROM tabela
GROUP BY campo
ORDER BY ocorrencias DESC
LIMIT 1

Já agora, confirma que entendeste o que escrevi neste parágrafo:

Agora não tenho nenhuma plataforma de testes, mas usa o EXPLAIN - palpita-me que isto deverá pedir filesort e temporary. Se isto for uma operação que vais fazer de forma recorrente, talvez seja melhor "desnormalizar" a base de dados um bocadinho, e teres uma tabela à parte para registares o número de ocorrências por evento (depois é só pedires o registo com o número de ocorrências mais alto).

Depois disto, podes marcar o tópico como resolvido!  :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
skiller10    0
skiller10

Eu tinha reparado no erro na query mas esqueci-me de referir isso.

Quanto ao parágrafo entendi a segunda parte, no entanto no meu caso optei por utilizar a query sem "desnormalizar" a base de dados.

Se poderes explica-me melhor a primeira frase que não entendi :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mjamado    47
mjamado
Se poderes explica-me melhor a primeira frase que não entendi :)

Coloca um EXPLAIN antes da query e analisa o resultado. Penso que é na última coluna que estão as notas: se estiver "using filesort" e, sobretudo, "using temporary", é mau sinal - pelo menos, vai monitorizando quanto tempo demora a query consoante a quantidade de dados na tabela.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
skiller10    0
skiller10

Neste momento a base de dados está vazia, executei a query com o EXPLAIN no início e apareceu-me tanto o "using filesort" como "using temporary" :s

A nível de tempo de execução foi instantâneo, vou agora experimentar carregar a base de dados.

Edit: A nível de tempo de execução não tenho quaisquer problemas

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade