두 개의 int 필드 (id, month)가있는 테이블 t1이 있는데 일부 값이 채워져 있습니다. 출력으로보고 싶은 것은 최대 (한 달의 ID 수)입니다. 나는 다음과 같은 코드를 시도하고 그것을 잘 작동합니다 :필드 개수로 파티션
select id,max(freq) as maxfreq from
(select id,month,count(*) as freq
from t1
group by id,month) a
group by id
order by maxfreq desc
결과는 다음과 같습니다
ID MAXFREQ
1 3
2 3
3 1
4 1
이 괜찮습니다. over partition by 절을 사용하여이를 달성하는 방법은 무엇입니까? 그리고 어느 것이 더 효율적입니까? 실제로 나의 테이블은 수천 개의 레코드로 구성됩니다. 그래서 하위 쿼리를 수행하면 좋은 생각이 아닐 것입니다! 어떤 도움을 주셔서 감사합니다.
select id,max(freq) as maxfreq from
(select id,row_number() over (partition by id,month ORDER BY id) as freq
from t1
) a
group by id
order by id,maxfreq desc
을하지만, 성능의 관점에서, 나는 원래 질문이 하나 사이에 큰 차이를 볼 수 없습니다 - 여기 the fiddle
몇 가지 샘플 데이터가있는 테이블 구조를 보여주세요 – Raj
@Raj 당신은 바이올린에서 찾을 수 있습니다. –
그룹 집계 함수를 다룰 때 초과 절을 사용할 수 없습니다. –