Programing

Order By가있는 SQL Group By

crosscheck 2020. 7. 25. 10:32
반응형

Order By가있는 SQL Group By


태그 테이블이 있고 목록에서 가장 많은 수의 태그를 얻고 싶습니다.

샘플 데이터는 다음과 같습니다

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

오라클에서는 이와 같은 것이 계산과 주문을 조금 더 잘 분리시키는 데 효과적입니다. 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

참고 URL : https://stackoverflow.com/questions/27983/sql-group-by-with-an-order-by

반응형