Сведения о вопросе

Henry

17:33, 19th August, 2020

Теги

mysql   sql   mysql-error-1111    

Группа SQL с заказа

Просмотров: 466   Ответов: 6

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

Примерные данные выглядят следующим образом

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

и я продолжаю получать "Invalid use of group function - ErrNr 1111"

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

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



  Сведения об ответе

pumpa

19:58, 17th August, 2020

Во всех версиях MySQL, просто псевдоним агрегата в списке SELECT и порядок по псевдониму:

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


  Сведения об ответе

P_S_S

12:01, 18th August, 2020

MySQL до версии 5 не допускались агрегатные функции в порядке предложений.

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

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

1, так как это первый столбец, который вы хотите сгруппировать.


  Сведения об ответе

dump

07:50, 28th August, 2020

Я не знаю о MySQL, но в MS SQL вы можете использовать индекс столбца в предложении order by . Я уже делал это раньше, когда делал подсчеты с group by s, поскольку с ним, как правило, легче работать.

Так

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


  Сведения об ответе

FAriza

03:10, 17th August, 2020

В 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


  Сведения об ответе

прога

15:55, 14th August, 2020

Вы можете обойти это ограничение с помощью устаревшего синтаксиса: ЗАКАЗ ОТ 1 DESC

Этот синтаксис не является устаревшим вообще, это E121-03 из SQL99.


  Сведения об ответе

Chhiki

21:39, 7th August, 2020

Попробуйте выполнить этот запрос

 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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться