Eu tenho uma tabela de tags e quero obter as tags de contagem mais alta da lista.
Os dados de amostra têm esta aparência
id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')
usando
SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`
retorna os dados que estou procurando perfeitamente. No entanto, eu gostaria de organizá-lo, para que as contagens mais altas de tags sejam as primeiras e limitá-las a enviar apenas os primeiros 20 ou mais.
Eu tentei isso ...
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20
e continuo recebendo uma "Uso inválido da função de grupo - Erro 1111"
O que estou fazendo de errado?
Estou usando o MySQL 4.1.25-Debian
mysql
sql
mysql-error-1111
maxsilver
fonte
fonte
O MySQL anterior à versão 5 não permitia funções agregadas nas cláusulas ORDER BY.
Você pode contornar esse limite com a sintaxe descontinuada:
1, já que é a primeira coluna na qual você deseja agrupar.
fonte
Eu não sei sobre MySQL, mas no MS SQL, você pode usar o índice da coluna na
order by
cláusula. Eu já fiz isso antes quando conta comgroup by
s, pois tende a ser mais fácil trabalhar.assim
Torna-se
fonte
No Oracle, algo assim funciona muito bem para separar sua contagem e a encomenda um pouco melhor. Não tenho certeza se funcionará no MySql 4.
fonte
) as counts
, mas ainda funcionava sem aas
parte.Essa sintaxe não está obsoleta, é E121-03 do SQL99.
fonte
Tente esta consulta
fonte