Sql 서버 창 열기 함수 Over()의 사용 실례 상세 설명
declare @t table(
ProductID int,
ProductName varchar(20),
ProductType varchar(20),
Price int)
insert @t
select 1,'name1','P1',3 union all
select 2,'name2','P1',5 union all
select 3,'name3','P2',4 union all
select 4,'name4','P2',4
조회 요구:각 제품 중 가격 이 가장 높 은 정 보 를 찾 아 냅 니 다.-방법 1:각 그룹 에서 가격 이 가장 큰 값 을 찾 습 니 다.그리고 각 조 의 가격 이 이 값 인 것 을 찾 아 보 세 요.
--단점:join 을 한 번 진행 해 야 한다
select t1.* from @t t1
join (select ProductType, max(Price) Price from @t group by ProductType) t2
on t1.ProductType = t2.ProductType
where t1.Price = t2.Price
order by ProductType
--방법 2:over()를 이용 해 통계 정 보 를 계산 한 뒤 결과 집 을 직접 선별한다.--over()는 함수(집합 함수 포함)를 줄 과 함께 출력 할 수 있 습 니 다.
;with cte as(select *, max(Price) over(partition by (ProductType)) MaxPrice from @t)
select ProductID,ProductName,ProductType,Price from cte where Price = MaxPrice
order by ProductType
-over()의 문법 은:over(patition by)--over()의 또 다른 상용 상황 은 rownumber()는 페이지 를 나 누 는 데 함께 사 용 됩 니 다.
이제 창문 을 여 는 함 수 를 소개 하 겠 습 니 다.
창 함수 OVER()는 창 함수 에서 출력 한 결 과 를 각 줄 의 값 으로 계산 하 는 줄 을 지정 합 니 다.
창 을 여 는 함 수 는 GROUP BY 를 사용 하지 않 아 도 데 이 터 를 그룹 으로 나 눌 수 있 고 기본 줄 의 열 과 집합 열 을 동시에 되 돌 릴 수 있 습 니 다.
1.랭 킹 창 열기 함수
ROW_NUMBER、DENSE_RANK,RANK,NTILE 은 순위 함수 에 속한다.
순위 창 열기 함 수 는 ORDER BY 문 구 를 단독으로 사용 할 수도 있 고,PARTITION BY 와 동시에 사용 할 수도 있 습 니 다.
PARTITION BY 는 결과 집합 을 그룹 으로 나 누 는 데 사용 되 며,창 을 여 는 함 수 는 각 그룹 에 적 용 됩 니 다.
ODER BY 는 열 림 함수 의 순 서 를 지정 합 니 다.랭 킹 창 열기 함수 에서 ORDER BY 문 구 를 사용 해 야 합 니 다.
예 를 들 어 모든 직원 의 주문 서 를 조회 하고 시간 에 따라 순 서 를 매 긴 다.
;WITH OrderInfo AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY OrderDate) AS Number,
OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK)
)
SELECT Number,OrderID,CustomerID, EmployeeID ,OrderDate
From OrderInfo WHERE Number BETWEEN 0 AND 10
창 함 수 는 PARTITION BY 구문 에 따라 직원 ID 에 따라 데이터 줄 을 나 눈 다음 ORDER BY 구문 에 따라 정렬 하고 순위 함수 ROWNUMBER()는 각 그룹의 데이터 로 나 뉘 어 1 부터 하나의 번 호 를 생 성 합 니 다.ROW_NUMBER()는 각 그룹의 줄 에 순서대로 유일한 번 호 를 생 성 합 니 다.
RANK()도 각 그룹의 줄 에 하나의 번 호 를 생 성하 고 ROWNUMBER()는 ORDER BY 의 정렬 에 따라 같은 값 이 있 으 면 같은 번 호 를 생 성하 고 다음 번 호 는 연결 되 지 않 습 니 다.예 를 들 어 같은 줄 두 개가 번호 3 을 만 들 면 그 다음 에 번호 5 가 생 긴 다.
DENSE_RANK()는 RANK()와 유사 하 며,다른 것 은 같은 번호 가 있다 면 다음 번 호 는 끊 기지 않 는 다 는 것 이다.같은 줄 두 개가 3 번 을 만 들 면 그 다음 에 생 성 되 는 번 호 는 4 라 는 것 이다.
NTILE (integer_expression)지정 한 숫자 에 따라 데 이 터 를 그룹 으로 나 누고 각 그룹 에 하나의 번 호 를 생 성 합 니 다.
2.취 합 창 함수
많은 집합 함 수 는 SUM,AVG,MAX,MIN 과 같은 창 함수 의 연산 으로 사용 할 수 있다.
취 합 창 함 수 는 PARTITION BY 자구 만 사용 할 수 있 거나 문구 가 없 으 며,ORDER BY 는 취 합 창 함수 와 함께 사용 할 수 없습니다.
예 를 들 어 직원 의 주문서 총수 와 주문서 정 보 를 조회 하 는 것 이다.
WITH OrderInfo AS
(
SELECT COUNT(OrderID) OVER(PARTITION BY EmployeeID) AS TotalCount,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK)
)
SELECT OrderID,CustomerID, EmployeeID ,OrderDate,TotalCount From OrderInfo ORDER BY EmployeeID
창 함수 가 PARTITION BY 문 구 를 사용 하지 않 는 다 면 데 이 터 를 그룹 으로 나 누 지 않 고 취 합 함수 로 모든 줄 의 값 을 계산 하 는 것 입 니 다.
WITH OrderInfo AS
(
SELECT COUNT(OrderID) OVER() AS Count,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK)
)
총결산위 에서 말 한 것 은 소 편 이 소개 한 Sql Server 창 열기 함수 Over()의 사용 사례 에 대한 상세 한 설명 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깊이 중첩된 객체를 정확히 일치 검색 - PostgreSQL목차 * 🚀 * 🎯 * 🏁 * 🙏 JSON 객체 예시 따라서 우리의 현재 목표는 "고용주"사용자가 입력한 검색어(이 경우에는 '요리')를 얻고 이 용어와 정확히 일치하는 모든 사용자 프로필을 찾는 것입니다. 즐거운 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.