SQL Group By с порядком By

У меня есть таблица тегов, и я хочу получить 9X_sql из списка теги с наибольшим количеством.

Пример 9X_mysql-server данных выглядит так

id (1) tag ('night') id (2) tag ('awesome') id (3) tag ('night') 

с помощью

SELECT COUNT(*), `Tag` from `images-tags` GROUP BY `Tag` 

отлично возвращает 9X_sqlselect мне данные, которые я ищу. Тем не менее, я 9X_sql-syntax хотел бы организовать его так, чтобы наибольшее 9X_mysqldump количество тегов было первым, и ограничить 9X_mysql-query его отправкой только первых 20 или около 9X_mysql-error-1111 того.

Я попробовал это...

SELECT COUNT(id), `Tag` from `images-tags` GROUP BY `Tag` ORDER BY COUNT(id) DESC LIMIT 20 

и я продолжаю получать 9X_mysqlclient "Недопустимое использование групповой функции 9X_my-sql - ErrNr 1111"

Что я делаю не так?

Я использую 9X_mysql-server MySQL 4.1.25-Debian

158
0
4
Общее количество ответов: 4

Ответ #1

Ответ на вопрос: SQL Group By с порядком By

Во всех версиях MySQL просто используйте 9X_sql-syntax псевдоним агрегата в списке SELECT и сортируйте 9X_sql-select по псевдониму:

SELECT COUNT(id) AS theCount, `Tag` from `images-tags` GROUP BY `Tag` ORDER BY theCount DESC LIMIT 20 

241
2

  • ИМХО, это более чистая версия, чем выбранный ответ. Сразу понятно, что заказано. Конечно, если э ...

Ответ #2

Ответ на вопрос: SQL Group By с порядком By

MySQL до версии 5 не разрешал агрегатные 9X_mysql-server функции в предложениях ORDER BY.

Вы можете 9X_sqlselect обойти это ограничение с помощью устаревшего 9X_mysql-query синтаксиса:

SELECT COUNT(id), `Tag` from `images-tags` GROUP BY `Tag` ORDER BY 1 DESC LIMIT 20 

1, так как это первый столбец, по 9X_mysql-query которому вы хотите выполнить группировку.

55
0

Ответ #3

Ответ на вопрос: SQL Group By с порядком By

Я не знаю о MySQL, но в MS SQL вы можете 9X_mysql-error-1111 использовать индекс столбца в предложении 9X_mysql-query order by. Я делал это раньше, когда считал с group bys, так 9X_mysqldump как с ним легче работать.

Итак

SELECT COUNT(id), `Tag` from `images-tags` GROUP BY `Tag` ORDER BY COUNT(id) DESC LIMIT 20 

становится

SELECT COUNT(id), `Tag` from `images-tags` GROUP BY `Tag` ORDER 1 DESC LIMIT 20 

12
0

Ответ #4

Ответ на вопрос: SQL Group By с порядком By

В Oracle что-то подобное отлично работает, чтобы 9X_mysql-server немного лучше разделить ваш подсчет и упорядочение. Я 9X_sql не уверен, что это будет работать в MySql 9X_mysql-query 4.

select 'Tag', counts.cnt from ( select count(*) as cnt, 'Tag' from 'images-tags' group by 'tag' ) counts order by counts.cnt desc 

8
0