데이터 사이언스 100번의 노크(구조화 데이터 처리편)- SQL Part 3 (Q41 to Q60)

데이터 사이언스
설명:

이 코드는 SQL 언어로 작성되었으며, 'WITH' 절을 사용하여 'sales_amount_by_date'와 'sales_amount_by_date_with_lag'라는 두 개의 임시 테이블을 생성하고 있다. 그리고 'sales_amount_by_date_with_lag' 테이블에서 특정 열을 선택하고 'LAG' 함수를 사용하여 연속된 날짜 간의 매출 금액 차이를 계산하고 있습니다.

구체적으로 이 코드는 다음과 같은 처리를 수행한다.

첫 번째 'WITH' 절은 'sales_amount_by_date'라는 임시 테이블을 생성하고 'RECIPATE' 테이블의 각 날짜별 매출 금액의 합계를 계산한다.

두 번째 'WITH' 절은 'sales_amount_by_date_with_lag'라는 또 다른 임시 테이블을 생성하고, 'LAG' 함수를 사용하여 전날의 매출 금액과 연속된 날짜 사이의 매출 금액의 차이를 계산한다.

마지막 'SELECT' 문에서는 'sales_amount_by_date_with_lag' 테이블에서 판매일, 판매금액, 전날, 이전 판매금액, 연속된 날짜의 판매금액 차이 등의 열을 선택한다.

그리고 결과는 판매 날짜의 오름차순으로 정렬되어 처음 10개의 행으로 제한된다.

요약하면, 이 코드는 "LAG" 함수를 사용하여 "영수증" 테이블의 연속된 날짜 사이의 판매 금액 차이를 계산하고 처음 10개의 행의 결과를 표시한다.
 
설명:

이 코드도 SQL 언어로 작성되었으며, 'WITH' 절을 사용하여 'sales_amount_by_date'와 'sales_amount_lag_date'라는 두 개의 임시 테이블을 생성하고 있다. 그리고 'sales_amount_lag_date' 테이블에 대해 자체 결합을 수행하여 특정 조건에 따라 결과를 필터링하고 있습니다.

구체적으로 이 코드는 다음과 같은 처리를 수행하고 있습니다.

첫 번째 'WITH' 절은 'sales_amount_by_date'라는 임시 테이블을 생성하고, 'receive' 테이블의 각 날짜별 매출 금액의 합계를 계산한다.

두 번째 'WITH' 절은 'sales_amount_lag_date'라는 또 다른 임시 테이블을 생성하고 'LAG' 함수를 사용하여 'sales_amount_by_date' 테이블의 3일 전 판매일과 각 날짜의 판매금액을 계산한다.

마지막 'SELECT' 문은 'sales_amount_lag_date' 테이블에서 특정 열을 선택하여 자신과 자체 결합을 수행한다. 결합 조건은 한 행의 판매일이 다른 행의 판매일보다 작고, 두 번째 행의 판매일이 3일 전의 첫 번째 행의 판매일 이하인 행만 포함하도록 결과를 필터링한다.

그리고 결과는 판매일과 이전 판매일의 오름차순으로 정렬되어 처음 10개의 행으로 제한됩니다.

요약하면, 이 코드는 'receipt' 테이블의 각 날짜별 매출 날짜와 매출 금액이 포함된 테이블에 대해 자체 결합을 실행하고 있습니다. 결합 조건은 한 행의 매출 날짜가 다른 행의 매출 날짜보다 작고, 두 번째 행의 매출 날짜가 3일 전의 첫 번째 행의 매출 날짜 이하인 행만 포함하도록 결과를 필터링합니다. 결과는 처음 10개 행의 판매일, 판매금액, 이전 판매일, 이전 판매금액이 표시됩니다.
 
설명:

이 코드도 SQL 언어로 작성되었으며, 'WITH' 절을 사용하여 'sales_amount_by_date'라는 이름의 임시 테이블을 생성하고 있다. 다음으로 'LAG' 함수를 사용하여 'sales_amount_with_lag'라는 이름의 또 다른 임시 테이블에 추가 열을 생성하고 있다. 마지막으로 'sales_amount_with_lag' 테이블에서 특정 컬럼을 선택하여 특정 조건에 따라 결과를 필터링하고 있습니다.

구체적으로 이 코드에서는 다음과 같은 처리를 수행하고 있습니다.

첫 번째 "WITH" 절은 "sales_amount_by_date"라는 임시 테이블을 생성하고 "receive" 테이블의 각 날짜별 매출 금액의 합계를 계산한다.

두 번째 "WITH" 절은 "sales_amount_with_lag"라는 또 다른 임시 테이블을 생성하고 "sales_amount_by_date" 테이블의 각 날짜의 판매 금액과 이전 3 일간의 판매 금액을 계산하기 위해 "LAG" 함수를 사용합니다.

마지막 "SELECT" 문은 "sales_amount_with_lag" 테이블에서 특정 열을 선택하고, 3 일 전 날짜가 NULL이 아닌 행만 포함하도록 결과를 필터링한다. 즉, 테이블의 첫 두 행은 세 번째 이전 날짜가 없기 때문에 제외된다.

그런 다음 결과를 판매 날짜의 오름차순으로 정렬하여 처음 10 개 행으로 제한합니다.

요약하면, 이 코드는 "영수증" 테이블의 각 날짜의 판매 금액의 합계를 계산하고 "LAG" 함수를 사용하여 각 날짜의 이전 3 일의 판매 날짜와 판매 금액을 계산한다. 결과는 각 날짜의 판매일과 판매금액, 이전 3일간의 판매일과 판매금액을 표시한다. 결과는 처음 두 행은 세 번째 이전 날짜가 없기 때문에 제외하도록 필터링된다. 결과의 처음 10개의 행은 매출 날짜의 오름차순으로 표시됩니다.
 
설명:

이 SQL 코드에서는 연령대(시대)와 성별에 따른 매출 금액의 합계를 정리한 sales_summary라는 테이블을 생성합니다.

먼저 고객 테이블과 영수증 테이블을 결합하여 gender_era_amount라는 공통 테이블 표현식(CTE)을 생성합니다. 이 CTE는 연령대(시대)와 성별에 따라 레코드를 그룹화하고 총 매출액을 계산한다.

그런 다음 gender_era_amount CTE의 데이터를 집계하여 sales_summary 테이블이 생성된다. 이 테이블에는 시대, 남성, 여성, 여성, 알 수 없음의 4개 컬럼이 있으며, SELECT 구문 내의 SUM(CASE...) 문은 성별별 매출 금액을 별도의 열로 피벗하는 데 사용됩니다.

마지막으로 SELECT 문을 사용하여 새로 생성된 sales_summary 테이블에서 모든 행을 가져옵니다.
 
 
설명:

이 코드는 SQL로 작성되었으며, customer라는 테이블에서 데이터를 가져온다. 이 코드의 목적은 customer 테이블에서 customer_id와 birth_day 컬럼을 가져오고, birth_day 컬럼을 특정 방식으로 서식을 지정하는 것이다.

SELECT 문을 사용하여 customer 테이블에서 데이터를 가져오고 LIMIT 절을 사용하여 반환되는 행 수를 10행으로 제한하고 있다.

TO_CHAR 함수는 birth_day 컬럼을 지정된 형식의 문자열로 변환하는 데 사용된다. 이 경우 형식은 'YYYYMMDD'이며, 생일의 년, 월, 일을 나타냅니다. 결과 문자열의 길이는 8자이며, 연도는 4자, 월은 2자, 일은 2자로 표현된다.

AS 키워드는 결과 컬럼의 이름을 birth_day로 변경하는 데 사용된다. 이 SELECT 문 결과 집합에는 customer_id와 birth_day라는 두 개의 열이 포함되어 있으며, birth_day 열에는 각 고객의 생년월일이 지정된 형식으로 포함되어 있습니다.

전체적으로 이 코드는 customer 테이블에서 customer_id와 birth_day 컬럼을 가져오고 birth_day 컬럼을 특정 방식으로 서식을 지정하고 싶을 때 유용하다. 이 형식화된 데이터는 분석이나 보고서 작성에 유용합니다.

 

설명:

이 코드는 SQL로 작성되었으며, customer라는 테이블에서 데이터를 가져온다. 이 코드의 목적은 customer 테이블에서 customer_id 열과 application_date 열을 가져와 application_date 열을 날짜 형식으로 변환하는 것이다.

SELECT 문을 사용하여 customer 테이블에서 데이터를 가져오고 LIMIT 절을 사용하여 반환되는 행 수를 10행으로 제한하고 있다.

TO_DATE 함수는 application_date 컬럼을 문자열에서 날짜 형식으로 변환하는 데 사용된다. 이 경우 형식은 'YYYYMMDD'이며, 신청일의 년, 월, 일을 나타낸다. 결과적으로 날짜 값은 yyyy-mm-dd 형식이 된다.

AS 키워드는 결과 컬럼의 이름을 application_date로 바꾸기 위해 사용된다. 이 SELECT 문 결과 집합에는 customer_id와 application_date라는 두 개의 컬럼이 포함되며, application_date 컬럼에는 각 고객의 신청 날짜가 날짜 형식으로 포함되어 있다.

전체적으로 이 코드는 고객 테이블에서 customer_id와 application_date 컬럼을 가져와 application_date 컬럼을 날짜 형식으로 변환하고 싶을 때 유용하다. 이 형식화된 데이터는 특히 날짜 계산이나 비교가 포함되는 경우 분석이나 보고서 작성에 유용합니다.
 
설명:

이 코드는 SQL로 작성되었으며, receipt라는 테이블에서 데이터를 가져온다. 이 코드의 목적은 reciport 테이블에서 reciport_no, reciport_sub_no, sales_ymd 열을 가져와 sales_ymd 열을 날짜 형식으로 변환하는 것이다.

SELECT 문은 RECIPATE 테이블에서 데이터를 가져오는 데 사용되며, LIMIT 구문은 반환되는 행의 수를 10으로 제한하는 데 사용된다.

CAST 함수는 sales_ymd 컬럼을 정수에서 문자열로 변환하는 데 사용된다. 결과 문자열에는 'YYYYMMDD' 형식으로 판매 날짜의 년, 월, 일이 포함될 것이다.

TO_DATE 함수는 sales_ymd의 문자열을 날짜 형식으로 변환하는 데 사용된다. 이 경우 형식은 'YYYYMMDD'이며, 이는 판매 날짜의 년, 월, 일을 나타낸다. 결과 날짜 값은 yyyy-mm-dd 형식이 된다.

AS 키워드는 결과 컬럼의 이름을 sales_ymd로 변경하는 데 사용된다. 이 SELECT 문 결과 집합에는 receive_no, receive_sub_no, sales_ymd의 세 개의 열이 포함되어 있으며, sales_ymd 열에는 각 영수증의 판매 날짜가 날짜 형식으로 포함되어 있습니다.

전체적으로 이 코드는 receipt 테이블에서 receive_no, receive_sub_no, sales_ymd 컬럼을 가져오고 sales_ymd 컬럼을 날짜 형식으로 변환하고 싶을 때 유용하다. 이 형식화된 데이터는 특히 날짜 계산이나 비교가 포함되는 경우 분석이나 보고서 작성에 유용하다.
 
설명:

이 코드는 SQL로 작성되었으며, receiport라는 테이블에서 데이터를 가져온다. 이 코드의 목적은 receive 테이블에서 receive_no, receive_sub_no, sales_epoch 열을 가져와 sales_epoch 열을 날짜 형식으로 변환하는 것이다.

SELECT 문을 사용하여 영수증 테이블에서 데이터를 가져오고 LIMIT 절을 사용하여 반환되는 행 수를 10행으로 제한하고 있다.

TO_TIMESTAMP 함수를 사용하여 sales_epoch 컬럼을 정수 값에서 타임스탬프 형식으로 변환하고 있다. 결과 타임스탬프는 1970년 1월 1일 00:00:00:00 UTC로부터 몇 초가 지났는지를 나타냅니다.

CAST 함수는 타임스탬프를 날짜 형식으로 변환하는 데 사용됩니다. 이 경우 결과 날짜 값은 yyyy-mm-dd 형식이 된다.

AS 키워드는 결과 컬럼의 이름을 sales_ymd로 변경하는 데 사용된다. 이 SELECT 문 결과 집합에는 receive_no, receive_sub_no, sales_ymd 세 개의 컬럼이 포함되어 있으며, sales_ymd 컬럼에는 각 영수증의 판매 날짜가 날짜 형식으로 포함되어 있다.

전체적으로 이 코드는 receipt 테이블에서 receipt_no, receive_sub_no 및 sales_epoch 열을 가져오고 sales_epoch 열을 날짜 형식으로 변환하고 싶을 때 유용하다. 이 형식화된 데이터는 특히 날짜 계산이나 비교가 포함된 경우 분석이나 보고서 작성에 유용하다.
 
설명:

이 코드는 SQL로 작성되었으며, receiport라는 테이블에서 데이터를 가져온다. 이 코드의 목적은 receive 테이블에서 receive_no, receive_sub_no, sales_epoch 열을 가져오고, sales_epoch의 타임스탬프 열에서 연도를 추출하는 것이다.

영수증 테이블에서 데이터를 가져오기 위해 SELECT 문을 사용하고, LIMIT 절을 사용하여 반환되는 행 수를 10행으로 제한하고 있다.

TO_TIMESTAMP 함수를 사용하여 sales_epoch 열을 정수 값에서 타임스탬프 형식으로 변환한다. 결과 타임스탬프는 1970년 1월 1일 00:00:00:00 UTC로부터의 초 단위가 된다.

EXTRACT 함수는 sales_epoch의 타임스탬프에서 연도를 추출하는 데 사용된다. 결과 값은 연도를 나타내는 정수가 됩니다.

AS 키워드는 결과 컬럼의 이름을 sales_year로 변경하는 데 사용됩니다. 이 SELECT 문 결과 집합에는 receive_no, receive_sub_no, sales_year의 세 개의 열이 포함되어 있으며, sales_year 열에는 각 영수증의 판매일 연도가 포함되어 있다.

전체적으로 이 코드는 receipt 테이블에서 receipt_no, receive_sub_no 및 sales_epoch 열을 가져오고 sales_epoch 타임스탬프 열에서 연도를 추출하고 싶을 때 유용하다. 이 추출된 데이터는 판매일 연도에 따라 데이터를 그룹화하거나 필터링하는 데 유용하다.
 
설명:

이 코드는 SQL로 작성되었으며, receiport라는 테이블에서 데이터를 가져온다. 이 코드의 목적은 receiport 테이블에서 receiport_no, receiport_sub_no, sales_epoch 열을 가져오고, sales_epoch 타임스탬프 열에서 월을 추출하고, 결과 월을 앞의 0이 두 자리 숫자로 된 문자열로 포맷하는 것이다.

SELECT 문은 영수증 테이블에서 데이터를 가져오는 데 사용되며, LIMIT 구문은 반환되는 행 수를 10으로 제한하는 데 사용된다.

TO_TIMESTAMP 함수를 사용하여 sales_epoch 컬럼을 정수 값에서 타임스탬프 형식으로 변환하고 있다. 결과 타임스탬프는 1970년 1월 1일 00:00:00:00 UTC로부터의 초 단위가 된다.

EXTRACT 함수는 sales_epoch의 타임스탬프에서 월을 추출하는 데 사용된다. 결과 값은 월을 나타내는 정수가 됩니다.

TO_CHAR 함수는 추출된 월을 필요에 따라 앞의 0이 포함된 문자열로 변환하는 데 사용되며, 'FM00' 형식 문자열은 결과 문자열이 고정된 폭의 2자이며 앞의 0은 제거된다는 것을 지정한다.

AS 키워드는 결과 컬럼의 이름을 sales_month로 변경하는 데 사용된다. 이 SELECT 문 결과 집합에는 receive_no, receive_sub_no 및 sales_month의 세 개의 열이 포함되어 있으며, sales_month 열에는 각 영수증의 판매 날짜의 월이 맨 앞의 0을 포함한 2자리 문자열로 포함되어 있다.

전체적으로 이 코드는 reciport 테이블에서 reciport_no, reciport_sub_no 및 sales_epoch 열을 가져와 sales_epoch 타임스탬프 열에서 월을 추출하고 결과 월을 앞의 0이 포함된 2자리 문자열로 서식을 지정한다. 원하는 경우에 유용하다. 이 형식화된 데이터는 판매일 월을 기준으로 데이터를 그룹화하거나 필터링하는 데 유용하다.

 

설명:

이 코드는 SQL로 작성되었으며, receiport라는 테이블에서 데이터를 가져온다. 이 코드의 목적은 receiport 테이블에서 receiport_no, receiport_sub_no, sales_epoch 열을 가져오고, sales_epoch 타임스탬프 열에서 날짜를 추출하고, 결과 날짜를 앞의 0이 두 자리 숫자로 된 문자열로 포맷하는 것이다.

SELECT 문은 영수증 테이블에서 데이터를 가져오는 데 사용되며, LIMIT 구문은 반환되는 행 수를 10으로 제한하는 데 사용된다.

TO_TIMESTAMP 함수를 사용하여 sales_epoch 컬럼을 정수 값에서 타임스탬프 형식으로 변환하고 있다. 결과 타임스탬프는 1970년 1월 1일 00:00:00:00 UTC로부터의 초 단위가 된다.

EXTRACT 함수는 sales_epoch의 타임스탬프에서 날짜를 추출하는 데 사용됩니다. 결과 값은 날짜를 나타내는 정수가 됩니다.

TO_CHAR 함수는 추출된 날짜를 필요에 따라 앞의 0이 포함된 문자열로 변환하는 데 사용되며, 'FM00' 형식 문자열은 결과 문자열이 고정된 폭의 2자이며 앞의 0이 제거된다는 것을 지정한다.

AS 키워드는 결과 컬럼의 이름을 sales_day로 변경하는 데 사용된다. 이 SELECT 문 결과 집합에는 receive_no, receive_sub_no, sales_day의 세 개의 열이 포함되어 있으며, sales_day 열에는 각 영수증의 판매일 날짜가 맨 앞의 0을 포함한 2자리 문자열로 포함되어 있다.

전체적으로 이 코드는 reciport 테이블에서 reciport_no, reciport_sub_no, sales_epoch 컬럼을 가져오고, sales_epoch 타임스탬프 컬럼에서 날짜를 추출하고, 결과 날짜를 앞의 0이 포함된 두 자리 문자열로 포맷하고 싶을 때 유용하다. 이 형식화된 데이터는 판매일 날짜를 기준으로 데이터를 그룹화하거나 필터링하는 데 유용하다.

 

설명:

이 SQL 코드는 receive라는 테이블에서 데이터를 선택하고 있다. 이 코드의 목적은 RECIPATE 테이블의 각 고객의 매출 총액을 계산하는 것과 각 고객의 매출 총액이 2000보다 큰지 여부를 나타내는 플래그를 생성하는 것입니다.

SELECT 문은 customer_id 열, SUM 함수로 계산한 각 고객의 매출 총액, 매출 총액이 2000보다 크면 1, 그렇지 않으면 0을 반환하는 CASE 식을 가져온다. 플래그가 포함된 결과 컬럼은 sales_flg로 명명한다.

WHERE 절은 고객 ID가 'Z'로 시작하는 레코드를 필터링하여 제외한다. 이는 특정 고객을 계산이나 플래그 설정에서 제외하는 데 사용할 수 있습니다.

GROUP BY 구문은 고객별 총 매출 금액과 플래그가 계산되도록 결과를 고객 ID별로 그룹화합니다.

LIMIT 절은 출력을 처음 10개의 결과로 제한합니다.

전체적으로 이 코드는 영수증 테이블의 각 고객에 대한 총 판매액을 계산하고 총 판매액이 특정 임계값(이 경우 2000)보다 큰지 여부를 나타내는 플래그를 생성하고자 할 때 유용합니다. 이는 고액 쇼핑을 하는 고객을 식별하거나 고객의 매출 금액을 집계하여 분석해야 하는 다른 유형의 분석에 유용할 수 있습니다.

 

설명:

이 SQL 코드에는 cust라는 공통 테이블 표현식(CTE)이 포함되어 있으며, customer 테이블에서 데이터를 선택하여 postal_cd를 기반으로 각 고객의 postal_flg 플래그를 계산하고 있습니다.

postal_flg 플래그는 CASE 수식을 사용하여 계산되며, postal_cd의 첫 세 글자가 100에서 209(포함)까지인지 확인하고, 참이면 1, 거짓이면 0이라는 값을 할당한다. 이 플래그는 예를 들어 우편번호 범위에 따라 고객을 그룹화하는 데 사용할 수 있다.

두 번째 CTE인 rect는 recipate 테이블에서 개별 customer_id를 선택한다.

마지막 SELECT 문은 customer_id 열에서 cust와 rect CTE를 결합하고, postal_flg 열에서 결과를 그룹화하며, COUNT(DISTINCT c.customer_id) 함수는 각 postal_flg 값에 대해 서로 다른 고객 수를 계산한다. 를 계산합니다.

전체적으로 이 코드는 고객 테이블과 영수증 테이블에 저장된 데이터를 기반으로 우편번호 범위에 따라 고객을 그룹화하고 각 범위의 다른 고객 수를 계산하고 싶을 때 유용하다.

 

설명:

이 SQL 코드는 customer 테이블에서 각 고객의 customer_id, address, prefecture_cd code를 선택한다.

이 코드의 CASE 표현식은 address 열의 첫 3글자를 체크하고 다음 조건에 따라 해당 prefecture_cd의 값을 할당한다.

주소란의 첫 3글자가 '사이타마현'이면 prefecture_cd 값은 '11'로 설정된다.

주소란의 첫 3글자가 '치바현'인 경우, prefecture_cd의 값은 '12'로 설정된다.

주소란의 첫 3글자가 '도쿄도'인 경우, prefecture_cd의 값은 '13'으로 설정된다.

주소란의 첫 3글자가 '가나가와'인 경우, prefecture_cd의 값은 '14'로 설정된다.

이 코드는 고객 테이블에 저장된 주소 정보를 바탕으로 고객을 도도부현별로 분류하고 싶을 때 유용하다. 결과값인 prefecture_cd 컬럼은 추가 분석이나 그룹화에 활용할 수 있다.

 

 
설명:

이 SQL 코드는 customer 테이블에서 각 고객의 customer_id, address, prefecture_cd code를 선택한다.

이 코드의 CASE 표현식은 정규식 패턴 '^. *? [도도부현]'을 사용하여 주소열에서 도도부현 이름을 추출하고, 아래 조건에 따라 해당 도도부현_cd 값을 할당하고 있다.

추출된 도도부현 이름이 '사이타마현'인 경우, prefecture_cd 값은 '11'로 설정된다.
추출된 도도부현 이름이 '지바현'인 경우, prefecture_cd 값은 '12'로 설정된다.
추출된 도도부현 이름이 '도쿄도'인 경우, prefecture_cd의 값은 '13'으로 설정된다.
추출된 도도부현이 '가나가와현'이라면 prefecture_cd의 값은 '14'로 설정된다.

이 코드는 앞의 예제와 비슷하지만, SUBSTR 함수 대신 SUBSTRING 함수를 사용하여 주소란에서 도도부현 이름을 추출하고 있다. 정규 표현식 패턴 '^. *? [都道府県]」는 임의의 문자(^. *?) 로 시작해서 도, 시, 도, 부, 현 중 하나로 끝나는 문자열과 일치합니다. 이 코드는 고객 테이블의 주소 정보가 표준화되지 않아 도도부현 명칭의 형식이 제각각인 경우에 유효하다. 생성된 prefecture_cd 컬럼은 추가 분석 및 그룹화에 사용할 수 있다.
 
설명:

이 SQL 코드는 customer라는 테이블에 대한 쿼리를 수행하여 처음 10행의 customer_id, address, prefecture_cd 컬럼을 선택하고 있습니다. 일치하도록 CASE 문장을 사용하여 작성되었습니다.

구체적으로 CASE 문장은 일본의 도도부현(사이타마현%, 지바현%, 도쿄도%, 가나가와현%) 뒤에 임의의 문자열이 이어지는 문자열 패턴과 LIKE 연산자를 사용하여 주소 컬럼을 확인한다. 주소 컬럼이 어느 한 패턴과 일치하면 해당 도도부현 코드(11, 12, 13, 14)가 prefecture_cd 컬럼에 부여된다.

이 코드는 앞서 제시한 다른 두 가지 예제와 비교하여 주소 컬럼에서 도도부현 코드를 추출하는 대체적인 방법이다.
 
설명:

이 SQL 코드는 다음 작업을 수행합니다.

SUM 함수를 사용하여 영수증 테이블의 금액 열을 고객 ID별로 합산하고 고객 ID별로 그룹화하여 각 고객의 판매 금액 합계를 계산합니다. 결과 테이블은 sales_amount라는 이름의 하위 쿼리로 저장됩니다.

창 함수인 PERCENTILE_CONT 함수를 사용하여 sales_amount 하위 쿼리에서 sum_amount 열의 사분위수(25위, 50위, 75위)를 계산한다.

CROSS JOIN 연산으로 sales_amount 하위 쿼리와 sales_pct 하위 쿼리를 결합하여 sales_amount 테이블의 각 행에 대한 사분위수 값을 얻는다.

마지막으로 새로운 열 pct_group을 계산하여 총 매출액을 기준으로 각 고객에게 다음과 같이 백분위수 그룹을 할당한다.

1:sum_amount가 25번째 백분위수보다 작은 경우(pct25)
2:sum_amount가 25백분위수 이상 50백분위수 미만인 경우(pct50).
3:sum_amount가 50번째 백분위수 이상 75번째 백분위수 미만인 경우(pct75).
sum_amount가 75 백분위수 이상이면 4.

최종 결과는 처음 10개의 행으로 제한된다.
 
설명:

이 코드는 customer 테이블에서 customer_id, birth_day, era(계산 필드)를 선택하고, era 필드는 고객의 나이(명시적으로 선택되지 않았지만 계산에 사용됨)를 결정하고, 10세 미만으로 잘린 나이와 60 사이의 낮은 값을 가져와서 계산한다. 낮은 값을 취하여 계산된다.

결과는 customer_id와 birth_day로 그룹화된다. 그런 다음 HAVING 절을 사용하여 연령이 60세 미만인 고객을 필터링한다.

요컨대, 이 코드는 고객 테이블에서 고객 정보를 선택하고, 나이와 시대를 계산하고, customer_id와 birth_day로 결과를 그룹화하여 연령이 60세 미만인 고객을 필터링하고 있다.
 
설명:

이 SQL 코드는 customer_id, birth_day, 그리고 gender_cd와 era로 구성된 연결 문자열을 선택한다. era는 고객의 나이를 10년 단위로 반올림한 것으로 최대 era는 60세까지이며, gender_era의 문자열은 gender_cd와 era를 연결하여 생성됩니다.

SQL 코드는 customer_id와 birth_day로 결과를 그룹화하고 결과의 처음 10줄만 반환한다.

전체적으로 이 코드는 연령과 성별을 포함한 고객 데이터의 요약을 생성하고 시대 차원을 추가한다. 생성된 테이블은 연령과 성별에 따라 고객을 추가로 분석하거나 세분화하는 데 사용할 수 있다.

 

설명:

이 SQL 코드는 customer_id를 선택하고 gender_cd_0, gender_cd_1, gender_cd_9라는 3개의 새로운 열을 생성한다. 이 새로운 컬럼은 CASE 문장을 사용하여 만들어졌습니다.

CASE 문은 조건문으로, 일련의 조건을 평가하고 해당 결과를 반환한다. 이 경우 각 고객에 대해 코드는 gender_cd 열의 값을 확인하고, gender_cd가 '0'인 경우 코드는 gender_cd_0 열에 '1'을 반환하고 다른 열에 '0'을 반환하고, gender_cd가 '1'인 경우 코드는 gender_cd_1 열에 '1'을 반환하고 다른 열에는 '0'을 반환하며, gender_cd가 '9'인 경우 코드는 gender_cd_9 열에 '1'을 반환하고 다른 열에는 '0'을 반환한다.

결과 출력은 customer_id, gender_cd_0, gender_cd_1, gender_cd_9 컬럼을 가지며, 각 고객에 대해 새로운 컬럼 중 하나만 고객의 성별을 나타내는 '1'이라는 값을 가지게 된다.
 
설명:

이 코드는 SQL 언어로 작성되었으며, SQL을 지원하는 데이터베이스 관리 시스템을 사용합니다.

이 코드는 recipate라는 테이블에 대해 데이터 분석 작업을 실행하고 있다. 이 테이블에는 customer_id, 금액 등의 열을 가진 트랜잭션 데이터가 포함되어 있습니다.

이 코드는 CTE(Common Table Expression)를 사용하여 두 개의 임시 테이블 sales_amount와 stats_amount를 생성하고 있다.

sales_amount라는 이름의 첫 번째 CTE는 문자 'Z'로 시작하지 않는 customer_id를 가진 각 고객이 사용한 금액의 합계를 계산하고 있다. 거래 데이터를 customer_id로 그룹화하여 각 customer_id의 금액 합계를 계산하고 있습니다.

stats_amount라는 이름의 두 번째 CTE는 각 고객이 사용한 총 금액의 평균과 표준편차를 계산하고 있습니다.

마지막 SELECT 문은 sales_amount 테이블에서 컬럼을 선택하고 크로스 조인을 사용하여 stats_amount 테이블과 결합합니다. 또한 총 금액에서 평균 금액을 빼고 이를 표준편차로 나누어 각 고객이 사용한 표준화된 금액을 계산하고 있습니다.

마지막 LIMIT 10은 출력을 처음 10행으로 제한하고 있다.

전체적으로 이 코드는 거래 데이터에 대한 통계 분석을 수행하여 'Z'로 시작하는 customer_id가 없는 각 고객이 사용한 표준화 된 금액을 계산하고 있습니다.

 

 
설명:

이 코드는 이전 코드와 매우 유사하지만, stats_amount CTE에서 한 가지 중요한 차이점이 있다.

표준편차 계산에 STDDEV_POP 함수를 사용하는 대신 STDDEV_SAMP 함수를 사용합니다.

STDDEV_SAMP는 데이터 샘플을 기반으로 모집단의 표준편차 추정치인 샘플 표준편차를 계산합니다.

반면 STDDEV_POP은 전체 모집단을 분석할 수 있다고 가정하고 정확한 모집단 표준편차를 계산한다.

즉, 이 코드의 출력은 이전 코드와 비슷하지만 표준편차 계산은 전체 모집단이 아닌 데이터 샘플을 기반으로 한다.

일반적으로 데이터 세트가 매우 큰 경우 샘플과 모집단의 표준 편차의 차이가 작습니다. 그러나 데이터 세트가 작으면 그 차이가 커질 수 있습니다.

 

설명:

이 코드도 영수증 테이블을 분석하지만, 표준화 된 금액을 계산하는 대신 각 고객이 사용한 계량된 금액을 계산합니다.

이 코드에서는 sales_amount와 stats_amount라는 두 개의 CTE를 사용하는데, 이는 이전 코드와 유사하다.

첫 번째 CTE는 문자 'Z'로 시작하지 않는 customer_id를 가진 각 고객이 사용한 총 금액을 계산하고, 두 번째 CTE는 임의의 고객이 사용한 총 금액의 최대값과 최소값을 계산하고 있습니다.

마지막 SELECT 문은 sales_amount 테이블에서 컬럼을 선택하고 크로스 조인을 사용하여 stats_amount 테이블과 결합하고 있다.

또한 각 고객이 사용한 스케일링된 금액을 계산합니다. 이는 사용한 총 금액에서 사용한 최소 금액을 뺀 후 사용한 총 금액 범위로 나눈 값으로, 최대 금액과 최소 금액의 차이입니다.

수식 앞의 1.0 *는 결과를 부동 소수점 숫자로 변환하는 데 사용됩니다. 수식에 사용된 값 중 하나가 부동 소수점 숫자일 때 필요합니다.

마지막 LIMIT 10은 출력을 처음 10행으로 제한합니다.

전체적으로 이 코드는 문자 'Z'로 시작하는 customer_id가 없는 각 고객이 지출한 금액(scaled amount)을 구하는 데이터 분석 작업을 수행하고 있다. 스케일링된 금액은 0에서 1 사이의 값으로, 모든 고객이 사용한 총액 범위에 대한 각 고객이 사용한 총액의 비율을 나타낸다.

 

 

Comment