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
Ответ #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
- ИМХО, это более чистая версия, чем выбранный ответ. Сразу понятно, что заказано. Конечно, если э ...
Ответ #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 которому вы хотите выполнить группировку.
Ответ #3
Ответ на вопрос: SQL Group By с порядком By
Я не знаю о MySQL, но в MS SQL вы можете 9X_mysql-error-1111 использовать индекс столбца в предложении 9X_mysql-query order by
. Я делал это раньше, когда считал с group by
s, так 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
Ответ #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
-
2
-
2
-
2
-
12
-
2
-
25
-
3
-
28
-
13
-
11
-
8
-
3
-
17
-
6
-
3
-
25
-
6
-
4
-
13
-
18
-
16
-
5
-
12
-
3
-
2
-
4
-
4
-
5
-
13
-
11
-
10
-
3
-
3
-
4
-
2
-
7
-
8
-
5
-
7
-
3
-
3
-
13
-
13
-
10
-
4
-
6
-
8
-
3
-
4
-
9