태그 테이블이 있고 목록에서 가장 많은 수의 태그를 얻고 싶습니다.
샘플 데이터는 다음과 같습니다.
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
답변
버전 5 이전의 MySQL은 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
작업하기가 더 쉬운 경향이 있기 때문에 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
답변
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
이 구문은 더 이상 사용되지 않으며 SQL99의 E121-03입니다.
답변
이 쿼리 시도
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