SQL에서 집계된 데이터와 집계되지 않은 데이터 비교

우리가 대답하고자 하는 질문 유형에 따라 때때로 SQL에서 집합된 데이터와 집합되지 않은 데이터를 비교해야 할 수도 있다.
이것이 바로 그룹 BY 자구가 우리가 집합되지 않은 모든 열을 한 줄로 압축하도록 강요하는 이유이다.
본고에서, 창 함수가 어떻게 이것을 매우 간단하게 만드는지 보실 수 있습니다.

큰 문제


COVID 데이터 세트를 사용하여 다음 질문에 답하려는 경우

How does each case recorded in Nigeria from March 2020 to June 2020 compared with the maximum case recorded within the same time frame.


우리는 이 질문에 대답할 수 있는 표를 되돌려 줄 수 있다. 이 표는 시간 범위 내에서 매일 기록하는 사례와 매일 기록하는 최대 사례를 포함한다.다음과 같이 하십시오.
날짜
나라
오늘 확인
시간 범위 내 최대값
2020-03-01
나이지리아
값 1
결과 세트의 최대값
2020-03-02
나이지리아
값 2
결과 세트의 최대값
2020-03-03
나이지리아
값 3
결과 세트의 최대값
2020-03-04
나이지리아
가치
결과 세트의 최대값
이것은 우리로 하여금 쉽게 도표를 그려서 비교를 할 수 있게 할 것이다.이 문제를 어떻게 해결하는지 봅시다

비효율적인 솔루션


SELECT 자문에서 이 결과를 생성할 수 있습니다.이 하위 검색은 최대 값을 계산하고 테이블의 줄마다 이 값을 되돌려줍니다.다음 코드를 참조하십시오.

SELECT
  date,
  countries_and_territories as country,
  daily_confirmed_cases AS confirmed_today,
  (
    SELECT
      MAX(daily_confirmed_cases)
    FROM
      `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide`
    WHERE
      geo_id = 'NG'
      AND date >= '2020-03-01'
      AND date < '2020-06-01'
  ) as highest_case_recorded_in_a_day
FROM
  `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide`
WHERE
  geo_id = 'NG'
  AND date >= '2020-03-01'
  AND date < '2020-06-01';

그러면 다음 결과가 반환됩니다.
날짜
나라
오늘 확인
일일 최다 사례
2020-03-01
나이지리아
0
533
2020-03-02
나이지리아
0
553
2020-03-10
나이지리아
일.
553
2020-03-15
나이지리아
0
553
2020-03-16
나이지리아
0
553
2020-03-17
나이지리아
0
553
2020-03-18
나이지리아
일.
553
2020-03-19
나이지리아
오.
553
2020-03-20
나이지리아
0
553
2020-03-21
나이지리아
사.
553
2020-03-22
나이지리아

553
2020-03-23
나이지리아
팔.
553
2020-03-24
나이지리아

553
2020-03-25
나이지리아
사.
553
2020-03-26
나이지리아
칠.
553
2020-03-27
나이지리아
십사
553
2020-03-28
나이지리아
십육
553
2020-03-29
나이지리아
십육
553
2020-03-30
나이지리아
0
553
2020-03-31
나이지리아
34
553
2020-04-01
나이지리아
0
553
2020-04-02
나이지리아
이십
553
2020-04-03
나이지리아
23
553
2020-04-04
나이지리아
십육
553
2020-04-05
나이지리아
이십
553
2020-04-06
나이지리아
22
553
2020-04-07
나이지리아
육.
553
2020-04-08
나이지리아
십육
553
2020-04-09
나이지리아
22
553
2020-04-10
나이지리아
십이
553
2020-04-11
나이지리아
십칠
553
2020-04-12
나이지리아
십삼
553
2020-04-13
나이지리아
오.
553
2020-04-14
나이지리아
이십
553
2020-04-15
나이지리아
삼십
553
2020-04-16
나이지리아
34
553
2020-04-17
나이지리아
35
553
2020-04-18
나이지리아
51
553
2020-04-19
나이지리아
49
553
2020-04-20
나이지리아
85
553
2020-04-21
나이지리아
38
553
2020-04-22
나이지리아
117
553
2020-04-23
나이지리아
91
553
2020-04-24
나이지리아
108
553
2020-04-25
나이지리아
114
553
2020-04-26
나이지리아
87
553
2020-04-27
나이지리아
91
553
2020-04-28
나이지리아
64
553
2020-04-29
나이지리아
195
553
2020-04-30
나이지리아
196
553
2020-05-01
나이지리아
204
553
2020-05-02
나이지리아
238
553
2020-05-03
나이지리아
218
553
2020-05-04
나이지리아
170
553
2020-05-05
나이지리아
244
553
2020-05-06
나이지리아
148
553
2020-05-07
나이지리아
195
553
2020-05-08
나이지리아
381
553
2020-05-09
나이지리아
386
553
2020-05-10
나이지리아
239
553
2020-05-11
나이지리아
248
553
2020-05-12
나이지리아
242
553
2020-05-13
나이지리아
146
553
2020-05-14
나이지리아
184
553
2020-05-15
나이지리아
191
553
2020-05-16
나이지리아
283
553
2020-05-17
나이지리아
176
553
2020-05-18
나이지리아
338
553
2020-05-19
나이지리아
216
553
2020-05-20
나이지리아
226
553
2020-05-21
나이지리아
276
553
2020-05-22
나이지리아
339
553
2020-05-23
나이지리아
245
553
2020-05-24
나이지리아
265
553
2020-05-25
나이지리아
313
553
2020-05-26
나이지리아
229
553
2020-05-27
나이지리아
276
553
2020-05-28
나이지리아
389
553
2020-05-29
나이지리아
182
553
2020-05-30
나이지리아
387
553
2020-05-31
나이지리아
553
553
보시다시피, 이것이 바로 우리가 테이블에 표시하고자 하는 데이터의 모양으로 되돌아옵니다.이제 다음 그림과 같이 차트를 계속 생성할 수 있습니다.

차트와 상호 작용할 수 있음here

그럼 질문이 뭐예요?


첫 번째 문제는 하위 조회가 전체 테이블을 실행함으로써 계산을 실행하는 것이다.이것은 우리가 얻은 결과를 얻기 위해 위의 조회가 표에서 두 번 실행된다는 것을 의미할 뿐이다.성능에 영향을 미칠 수 있습니다.
또 다른 문제는 하위 검색은 읽기와 유지보수가 어렵다는 것이다.위의 조회가 무엇을 하는지 일목요연하게 이해하기 어렵다

창 함수 해석


이제 창 함수를 사용해서 이 문제를 해결합시다.
첫 번째 질의의 하위 질의를 창 함수로 대체하는 방법은 다음과 같습니다.
SELECT
  date,
  countries_and_territories as country,
  daily_confirmed_cases AS confirmed_today,
  MAX(daily_confirmed_cases) OVER() as highest_case_recorded_in_a_day
FROM
  `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide`
WHERE
  geo_id = 'NG'
  AND date >= '2020-03-01'
  AND date < '2020-06-01'


OVER () 함수는 시작 창 함수 (이 시리즈의 이전 글에서 설명한 바와 같이) 이고, MAX () 는 지정된 시간 범위 내의 특정 날짜에 기록된 최대 값을 가져옵니다.
창 함수는 쿼리의 WHERE 부분에서 얻은 결과 집합을 사용하기 때문에 하위 쿼리 옵션처럼 전체 테이블에서 실행되지 않습니다.
마지막으로, 당신은 더욱 짧고, 더욱 읽을 수 있으며, 유지 보수와 성능이 좋은 코드를 얻었습니다.

결론


내가 본문에서 묘사한 것은 매우 간단한 창 함수 용례이다.논평 부분의 총결산과 미총결산 데이터를 비교하여 우리가 2019 관상바이러스 질병과 관련된 어떤 식견이 있는 질문에 대답할 수 있는지 알 수 있다.
다음은 이 시리즈에서 실행 총계, 사례의 매일_증가 등 다른 줄에 의존하는 값을 계산하는 것에 대해 논의할 것입니다.

좋은 웹페이지 즐겨찾기