Ответ 1
Во всех версиях MySQL просто псевдоним агрегата в списке SELECT и порядок по псевдониму:
SELECT COUNT(id) AS theCount, `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY theCount DESC
LIMIT 20
У меня есть таблица тегов и вы хотите получить наивысшие теги count из списка.
Пример данных выглядит следующим образом
id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')
используя
SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`
возвращает мне данные, которые я ищу совершенно. Тем не менее, я хотел бы организовать его, так что наивысшее количество тегов будет первым и ограничить его только отправкой мне первых 20 или около того.
Я пробовал это...
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20
и я продолжаю получать "Недопустимое использование групповой функции - ErrNr 1111"
Что я делаю неправильно?
Я использую MySQL 4.1.25-Debian
Во всех версиях MySQL просто псевдоним агрегата в списке SELECT и порядок по псевдониму:
SELECT COUNT(id) AS theCount, `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY theCount DESC
LIMIT 20
MySQL до версии 5 не разрешил агрегированные функции в предложениях ORDER BY.
Вы можете обойти этот предел с устаревшим синтаксисом:
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY 1 DESC
LIMIT 20
1, так как это первый столбец, который вы хотите сгруппировать.
Я не знаю о MySQL, но в MS SQL вы можете использовать индекс столбца в предложении order by
. Я делал это раньше, когда делаю счет с group by
, поскольку с ним легче работать.
Итак,
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
В Oracle, что-то вроде этого прекрасно работает, чтобы отделить ваш счет и упорядочить немного лучше. Я не уверен, что он будет работать в MySql 4.
select 'Tag', counts.cnt
from
(
select count(*) as cnt, 'Tag'
from 'images-tags'
group by 'tag'
) counts
order by counts.cnt desc
Вы можете обойти этот предел с устаревшим синтаксисом: ORDER BY 1 DESC
Этот синтаксис не устарел вообще, он E121-03 из SQL99.
Попробуйте этот запрос
SELECT data_collector_id , count (data_collector_id ) as frequency
from rent_flats
where is_contact_person_landlord = 'True'
GROUP BY data_collector_id
ORDER BY count(data_collector_id) DESC