취 합 함수 대신 SQL 의 창 열기 함수 에 대한 자세 한 설명 을 사용 할 수 있 습 니 다.

창 을 여 는 함 수 를 배우 기 전에 우 리 는 모두 알 고 있 습 니 다.그룹 을 나 눈 후에 조회 필드 는 그룹 필드 와 취 합 된 필드 만 있 을 수 있 습 니 다.이것 은 매우 큰 불편 을 가 져 왔 습 니 다.가끔 은 우리 가 조회 할 때 그룹 을 나 누 어야 하고 그룹 을 나 누 지 않 는 필드 도 조회 해 야 합 니 다.매번 에 하위 로 조회 해 야 합 니 다.그러면 sql 문 구 는 복잡 하고 이해 하기 어렵 고 코드 를 유지 하 는 사람 에 게 큰 고통 을 가 져 다 줍 니 다.그러나 창문 을 여 는 함수 가 나 타 났 고 서광 도 왔 다.창 을 여 는 함 수 를 더 구체 적 으로 알 고 싶다 면 을 읽 으 십시오.창 을 여 는 함 수 는 my sql 에서 사용 할 수 없습니다.
       창문 을 여 는 함 수 는 집합 함수 와 마찬가지 로 줄 의 집합 그룹 을 집합 하여 계산한다.이것 은 줄 에 창 을 정의 하 는 데 사 용 됩 니 다.(이 창 은 연산 할 줄 의 집합 을 말 합 니 다)그룹 값 을 조작 합 니 다.group by 문 구 를 사용 하여 데 이 터 를 그룹 으로 나 눌 필요 가 없습니다.같은 줄 에서 기본 줄 의 열 과 집합 열 을 동시에 되 돌 릴 수 있 습 니 다.정 의 를 못 알 아 봐 도 괜찮아,쓸 줄 알 면 돼.
       간단 한 예 를 들 어 각 급여 가 5000 이하 인 직원 정보(이름,도시 연령 급여)를 조회 하고 5000 이하 의 직원 개 수 를 표시 하 며 다음 문 구 를 사용 해 보 세 요.

SELECT FName, FCITY, FAGE, FSalary, COUNT(FName) FROM T_Person WHERE FSALARY<5000
메시지 8120,레벨 16,상태 1,첫 줄
목록 에 있 는 열 선택'TPerson.FName'이 잘못 되 었 습 니 다.이 열 은 집합 함수 나 GROUP BY 자구 에 포함 되 어 있 지 않 기 때 문 입 니 다.
         하위 검색 을 사용 하여 구현 할 수 있 습 니 다.

SELECT FName, FCITY, FAGE, FSalary, ( SELECT COUNT(FName) FROM T_Person WHERE FSALARY<5000 ) PersonNum FROM T_Person 
WHERE FSALARY<5000
       결과:

     창 을 여 는 함수 로 이 루어 집 니 다.조회 결과 가 똑 같 으 면 붙 이지 않 습 니 다.

SELECT FName, FCITY, FAGE, FSalary, COUNT(FName) OVER() as PersonNum FROM T_Person 
WHERE FSALARY<5000
1.창 열기 함수 형식:함수 명(열)OVER(옵션)
2.취 합 창 함수 형식:취 합 함수(열)OVER(PARTITION BY 필드)
      over 키 워드 는 취 합 함 수 를 취 합 함수 가 아 닌 취 합 창 함수 로 생각 합 니 다.SQL 표준 은 모든 취 합 함 수 를 취 합 창 함수 로 사용 할 수 있 습 니 다.오 버 키워드 뒤의 괄호 에는 취 합 연산 을 하 는 창의 범 위 를 바 꾸 기 위해 옵션 을 자주 추가 합 니 다.만약 OVER 키워드 뒤의 괄호 가 비어 있다 면,창 을 여 는 함 수 는 결과 집합의 모든 줄 을 취 합 연산 합 니 다.
      PARTITION BY 는 줄 의 파 티 션 을 정의 하여 취 합 연산 을 합 니 다.group by 와 달리 partition by 자구 가 만 든 파 티 션 은 결과 집합 에 독립 되 어 있 습 니 다.만 든 파 티 션 은 취 합 연산 에 만 사용 되 고 서로 다른 창문 함수 가 만 든 파 티 션 은 서로 영향 을 주지 않 습 니 다.예 를 들 어 모든 사람의 정 보 를 조회 합 니 다.그리고 소속 도시 의 인원 수 와 같은 연령 의 인원 수 를 조회 합 니 다.

SELECT FName,FCITY, FAGE, FSalary, COUNT(FName) OVER(PARTITION BY FCITY) CityNum, 
COUNT(FName) OVER(PARTITION BY FAGE) AgeNum FROM T_Person ORDER by FCITY
 
모든 인원 의 정 보 를 조회 하고 소속 도시 의 인원 수 를 조회 하 며 각 도시 의 사람들 은 연령 에 따라 문 구 를 배열 한다.

SELECT FName,FCITY, FAGE, FSalary, COUNT(FName) OVER(PARTITION BY FCITY ORDER BY FAGE) CityNum FROM T_Person 

 3.정렬 창 열기 함수 형식:정렬 함수()OVER(ORDER BY 필드)
  (1)주요 함 수 는 ROWNUMBER()、RANK()、DENSE_RANK()、NTILE()
   ROW_NUMBER()에 줄 번 호 를 추가 하면 페이지 별로 조회 할 수 있 습 니 다(현재 offset).  fetch 대체)홈 키 열 이 없 는 표 에 줄 번 호 를 추가 하 는 역할 이 뚜렷 하고 중복 데 이 터 를 삭제 합 니 다.
  월급 의 높 고 낮 음 에 따라 모든 인원 에 게 순 위 를 매 길 수 있 습 니 다.같은 월급 의 순위 가 다 르 면 row 를 사용 할 수 있 습 니 다.number(),

with a as 
(
SELECT FName, FSalary, FCity, FAge, ROW_NUMBER() over(ORDER BY FSalary) as RowNum FROM T_Person 
)
SELECT * FROM a 

 rank()를 사용 하여 각 도시 의 월급 순 위 를 같은 순위 로 두 개의 1 위 가 나 올 때 두 개의 1 위 뒤에 있 는 순 위 는 3 위 가 될 것 이다.

SELECT FName, FSalary, FCity, FAge, RANK() over(PARTITION BY FCITY ORDER BY FSalary) as RankNum FROM T_Person 

  dense 사용rank()는 각 도시 의 월급 순 위 를 같은 순위 로 두 개의 1 위 가 나 올 때 두 개의 1 위 뒤에 있 는 순 위 는 3 위 가 될 것 이다.
 
ntile(숫자)over(orderby 필드):숫자 는 한 그룹의 몇 개 수 를 나타 내 고 수량 에 따라 그룹의 수량 을 나 타 냅 니 다.

SELECT *,NTILE(5) OVER(ORDER BY FSalary) AS NileNum FROM T_Person

총결산
취 합 함수 대신 사용 할 수 있 는 SQL 의 창 열기 함수 에 대한 자세 한 설명 은 여기까지 입 니 다.더 많은 SQL 창 열기 함수 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기