데이터 사이언스 100번의 노크(구조화 데이터 처리편)- SQL Part 4 (Q61 to Q80)

데이터 사이언스
설명:

데이터베이스에서 데이터를 가져오는 SQL 쿼리입니다. 단계별로 분해해 보자.

쿼리는 %%sql magic 명령으로 시작하는데, 이는 Jupyter 노트북에서 다음 코드가 SQL 코드임을 지정하는 데 사용됩니다.

메인 쿼리에서는 customer_id, sum_amount, log_amount라는 세 개의 컬럼을 선택한다. 이 컬럼들은 괄호 안의 하위 쿼리에서 파생됩니다.

괄호 안의 하위 쿼리에서는 먼저 customer_id가 "Z"로 시작하는 모든 레코드를 필터링하여 제외한다. 이는 NOT LIKE 'Z%'라는 조건에 의해 수행됩니다.

필터링된 레코드는 GROUP BY 절을 사용하여 customer_id로 그룹화됩니다.

SUM 함수는 각 고객 ID의 총 금액을 계산하는 데 사용된다.

AS sum_amount 절은 계산된 컬럼의 이름을 sum_amount로 변경한다.

하위 쿼리는 sum_amount_tbl로 별칭이 지정된다.

마지막으로 외부 쿼리는 customer_id, sum_amount, sum_amount에 0.5를 더한 대수(base e)를 선택한다. 이것은 LOG 함수를 사용하여 계산되며, log_amount라는 별칭이 붙는다.

결과는 LIMIT 구문으로 10행으로 제한됩니다.
 
설명:

데이터베이스에서 데이터를 가져오는 SQL 쿼리입니다. 단계별로 분해해 보자.

쿼리는 %%sql magic 명령으로 시작하는데, 이는 Jupyter 노트북에서 다음 코드가 SQL 코드임을 지정하는 데 사용됩니다.

메인 쿼리에서는 customer_id, sum_amount, log_amount라는 세 개의 컬럼을 선택한다. 이 컬럼들은 괄호 안의 하위 쿼리에서 파생됩니다.

괄호 안의 하위 쿼리에서는 먼저 customer_id가 "Z"로 시작하는 모든 레코드를 필터링하여 제외한다. 이는 NOT LIKE 'Z%'라는 조건에 의해 수행됩니다.

필터링된 레코드는 GROUP BY 절을 사용하여 customer_id로 그룹화됩니다.

SUM 함수는 각 고객 ID의 총 금액을 계산하는 데 사용된다.

AS sum_amount 절은 계산된 컬럼의 이름을 sum_amount로 변경한다.

하위 쿼리는 sum_amount_tbl로 별칭이 지정된다.

마지막으로 외부 쿼리는 customer_id, sum_amount, sum_amount의 자연대수(바닥 e)에 0.5를 더한 값을 선택한다. 이것은 LN 함수를 사용하여 계산되며, log_amount라는 별칭이 붙는다.

결과는 LIMIT 구문으로 10줄로 제한된다.
 
설명:

데이터베이스에서 데이터를 가져오는 SQL 쿼리입니다. 단계별로 분해해 보겠습니다.

쿼리는 %%sql 매직 명령으로 시작하며, 이는 Jupyter 노트북에서 다음 코드가 SQL 코드임을 지정하는 데 사용됩니다.

메인 쿼리에서는 product_cd, unit_price, unit_cost, unit_profit의 4개 컬럼을 선택한다. 이 컬럼들은 product 테이블에서 파생된다.

FROM 절은 제품 테이블을 지정한다.

LIMIT 절은 쿼리가 반환하는 행 수를 10으로 제한한다.

이 쿼리에서는 단가에서 단가를 빼서 단위 수익을 계산합니다. 이는 - 연산자를 사용하여 수행됩니다.

쿼리 결과에는 product 테이블의 처음 10개의 행인 product_cd, unit_price, unit_cost, unit_profit이 포함된다.

전체적으로 이 쿼리는 선택한 제품의 가격, 비용 및 이익에 대한 정보를 얻는다.

 

설명:

이 코드는 SQL을 사용하여 'product'라는 데이터베이스 테이블의 상위 10개 상품의 평균 단가 수익률을 조회하는 코드입니다. 다음은 코드의 각 부분에 대한 설명입니다.

"%%sql"은 Jupyter notebook의 매직 명령어로, 아래 코드를 SQL로 해석하도록 노트북에 지시합니다.

"SELECT"는 데이터베이스에서 데이터를 가져온다는 것을 나타내는 SQL 키워드입니다.

"AVG"는 주어진 값 집합의 평균을 계산하는 SQL 함수입니다.

"((unit_price * 1.0 - unit_cost) / unit_price)"는 각 상품의 단위당 수익률을 계산하는 계산식입니다. 단가에서 단가를 빼고 그 결과를 단가로 나누는 방식이며, 1.0의 곱셈은 나눗셈이 정수가 아닌 부동소수점 값을 반환하도록 하기 위해 1.0을 곱하는 것입니다.

"AS unit_profit_rate"는 계산된 값을 "unit_profit_rate"라는 컬럼에 대입합니다.

"FROM product"는 "product" 테이블에서 데이터를 가져올 것을 지정한다.

"LIMIT 10"은 반환되는 행 수를 10행으로 제한한다. 즉, 어떤 기준(코드 스니펫에서는 지정되지 않음)에 따라 상위 10개 제품의 결과만 표시한다는 의미이다.

 

설명:

이 코드에서는 SQL을 사용하여 "product"라는 데이터베이스 테이블의 수정된 버전을 조회하고 있습니다. 수정 내용은 각 상품의 단가에서 새로운 가격을 산출하고, 이 새로운 가격을 사용하여 새로운 이윤율을 산출하는 것입니다. 다음은 코드의 각 부분을 설명합니다.

"%%sql"은 Jupyter notebook의 매직 명령으로, 다음 코드를 SQL로 해석하도록 노트북에 지시한다.

"WITH new_price_tbl AS (...)" 는 "new_price_tbl"이라는 CTE(Common Table Expression)를 설정합니다. 이를 통해 후속 쿼리에서 사용할 수 있는 하위 쿼리를 정의할 수 있습니다.

"( SELECT product_cd, unit_price, unit_cost, TRUNC(unit_cost / 0.7) AS new_price FROM product )"는 'product' 테이블에서 데이터를 선택하고, 단가를 기준으로 새로운 가격을 계산하여 'new price'라는 새로운 열에 할당하는 하위 쿼리이며, 'TRUNC' 함수를 사용하여 계산된 새로운 가격을 가장 가까운 정수로 반올림하고 있다. 이는 회사가 제품 가격을 정수로 결정하고 싶다는 가정을 기반으로 한다.

"SELECT *, (new_price - unit_cost) / new_price AS new_profit_rate FROM new_price_tbl LIMIT 10 ;"은 "new_price_tbl"의 모든 열을 선택하는 메인 쿼리이다. 의 새로운 수익률을 계산합니다. 새로운 수익률은 새로운 가격에서 단가를 빼고 그 결과를 새로운 가격으로 나누어 'new_profit_rate'라는 새로운 열에 대입하여 계산됩니다. 즉, 어떤 기준(코드 스니펫에서 지정하지 않은)에 따라 상위 10개 상품의 결과만 표시하고 싶다는 의미입니다.
 
설명:

이 코드는 SQL로 작성되었으며, 'new_price_tbl'이라는 공통 테이블 표현식(CTE)을 사용하여 'product'라는 테이블에서 데이터를 선택하는 데 사용됩니다. 이 코드는 각 상품의 단가를 0.7로 나누어 새로운 가격을 계산하고, 새로운 가격에서 단가를 빼고, 그 결과를 새로운 가격으로 나누어 새로운 이윤율을 계산한다.

아래는 이 코드의 단계별 분석입니다.

WITH new_price_tbl AS (...) : 괄호로 둘러싸인 SELECT 문에서 데이터를 일시적으로 저장하는 데 사용되는 'new_price_tbl'이라는 공통 테이블 표현식(CTE)을 정의하고 있다.

SELECT product_cd, unit_price, unit_cost, ROUND(unit_cost / 0.7) AS new_price FROM product: 상품 코드, 단가, 단가를 선택하고 각 상품의 단가를 0.7로 나눈 후 그 결과를 반올림하여 새로운 가격을 계산합니다. 가격을 계산합니다.

SELECT *, (new_price - unit_cost) / new_price AS new_profit_rate FROM new_price_tbl LIMIT 10: 'new_price_tbl' CTE에서 모든 컬럼을 선택하고 새 가격에서 단가를 뺀 후, 그 결과를 새로운 가격으로 나누어 새로운 이윤율을 계산한다. 마지막으로 출력을 처음 10줄로 제한하고 있다.

요약하면, 이 코드는 CTE를 사용하여 필요한 데이터를 일시적으로 저장하고, 그 데이터에 대해 산술 연산을 수행하여 각 상품의 새로운 가격과 새로운 이윤율을 계산하고 있다.
 
설명:

이 코드는 이전 코드와 비슷하지만 새 가격을 반올림하는 대신 CEIL 함수를 사용하여 가장 가까운 정수로 반올림합니다.

아래는 코드의 단계별 분석입니다.

WITH new_price_tbl AS (...) : 괄호로 둘러싸인 SELECT 문에서 데이터를 일시적으로 저장하는 데 사용되는 'new_price_tbl'이라는 공통 테이블 표현식(CTE)을 정의하고 있다.

SELECT product_cd, unit_price, unit_cost, CEIL(unit_cost / 0.7) AS new_price FROM product: 상품 코드, 단가, 단가를 선택하고 각 상품의 단가를 0.7로 나눈 후, CEIL 함수로 소수점 이하를 반올림하여 반올림하여 새로운 가격을 계산합니다.

SELECT *, (new_price - unit_cost) / new_price AS new_profit_rate FROM new_price_tbl LIMIT 10: 'new_price_tbl' CTE에서 모든 컬럼을 선택하고, 새 가격에서 단가를 뺀 후, 그 결과를 새 가격으로 나누어 새로운 수익률을 계산한다. 마지막으로 출력을 처음 10줄로 제한하고 있다.

요약하면, 이 코드는 CTE를 사용하여 필요한 데이터를 일시적으로 저장하고, 그 데이터에 대해 산술 연산을 수행하여 각 상품의 새로운 가격과 새로운 이윤율을 계산하고 있다. 단, 새로운 가격은 이전 코드처럼 반올림하지 않고 CEIL 함수를 사용하여 가장 가까운 정수로 반올림한다.
 
설명:

이 코드는 SQL로 작성되었으며, 'product'라는 이름의 테이블에서 데이터를 선택하는 데 사용됩니다. 이 코드에서는 상품 코드, 단가를 선택하고 각 상품의 부가세 포함 가격을 계산합니다. 단가에 1.1을 곱하고 결과를 반올림하여 소수점 이하를 제거합니다.

다음은 코드의 단계별 분석입니다.

SELECT product_cd, unit_price, TRUNC(unit_price * 1.1) AS tax_price FROM product: 상품 코드, 단가를 선택하여 각 상품의 세금 포함 가격을 계산합니다. 단가에 1.1을 곱하고 TRUNC 함수로 소수점 이하를 반올림합니다.

FROM product: 데이터를 선택할 '상품' 테이블을 지정합니다.

LIMIT 10: 출력을 처음 10줄로 제한합니다.

요약하면, 이 코드에서는 각 상품의 단가에 1.1을 곱하여 부가세 포함 가격을 계산하고, TRUNC 함수로 소수점 이하를 반올림하고 있습니다.

설명:

이 코드는 SQL로 작성되었으며, 'amount_all'과 'amount_07'이라는 두 개의 공통 테이블 표현식(CTE)을 사용하여 'receive'와 'product'라는 두 개의 테이블에서 데이터를 선택하는 데 사용된다. 이 코드는 각 고객이 사용한 금액의 합계와 메이저 카테고리 코드가 '07'인 상품에 사용한 금액의 합계를 계산한다. 그런 다음 두 CTE를 결합하여 각 고객의 카테고리 '07' 상품의 판매율을 계산한다.

다음은 코드의 단계별 예시입니다.

WITH amount_all AS(...) 를 사용합니다. 이것은 괄호로 둘러싸인 SELECT 문에서 데이터를 일시적으로 저장하는 데 사용되는 'amount_all'이라는 공통 테이블 표현식(CTE)을 정의하고 있다.

SELECT customer_id, SUM(amount) AS sum_all FROM receipt GROUP BY customer_id: 'receiption' 테이블에서 고객 ID와 각 고객이 사용한 금액의 합계를 선택하고 그 결과를 고객 ID별로 그룹화한다. 그룹화합니다.

또한, amount_07 AS(...) 를 사용합니다. 이는 괄호로 둘러싸인 SELECT 문에서 데이터를 일시적으로 저장하는 데 사용되는 'amount_07'이라는 이름의 또 다른 CTE를 정의하고 있다.

SELECT r.customer_id, SUM(r.amount) AS sum_07 FROM receipt r JOIN product p ON r.product_cd = p.product_cd WHERE p.category_major_cd = '07' GROUP BY customer_id: 고객 ID와 메이저 카테고리 코드가 '07'인 제품에 지출된 금액의 합계를 'receiport'와 'product' 테이블에서 선택하고, 제품 코드에서 두 테이블을 결합하고, 메이저 카테고리 코드 '07'로 제품을 필터링한 후 고객 ID로 결과를 그룹화한다.

SELECT amount_all.customer_id, sum_all, sum_07, sum_07, sum_07 * 1.0 / sum_all AS sales_rate FROM amount_all JOIN amount_07 ON amount_all.customer_id = amount_07. customer_id LIMIT 10: 고객 ID, 각 고객이 사용한 모든 금액의 합계, 각 고객이 카테고리 '07' 제품에 사용한 금액의 합계, 카테고리 '07' 제품에 사용한 금액의 합계를 고객이 사용한 모든 금액의 합계로 나눈 값을 통해 각 고객의 카테고리 '07' 제품의 판매율을 선택한다. 마지막으로 고객 ID로 2개의 CTE를 결합하여 출력을 처음 10줄로 제한한다.

요약하면, 이 코드는 먼저 각 고객의 전체 소비 금액의 합계와 각 고객의 "07"제품에 대한 소비 금액의 합계를 계산하고, 후자를 전자로 나누어 각 고객의 "07"제품의 판매율을 계산한다. 이는 두 개의 CTE를 사용하여 필요한 데이터를 일시적으로 저장하고, 그 데이터에 대해 산술 연산과 결합을 수행함으로써 실현된다.
 
설명:

이 코드는 SQL로 작성되었으며, 'receipt_distinct'라는 공통 테이블 표현식(CTE)을 사용하여 'receipt'와 'customer'라는 두 개의 테이블에서 데이터를 선택하는 데 사용됩니다. 이 코드는 고객의 신청일과 해당 고객이 별도의 판매일 사이에 경과한 일수를 계산하고 있다.

다음은 코드의 단계별 분석입니다.

WITH receipt_distinct AS(...) 라고 합니다. 이는 괄호로 둘러싸인 SELECT 문에서 데이터를 일시적으로 저장하는 데 사용되는 'receipt_distinct'라는 이름의 공통 테이블 표현식(CTE)을 정의하고 있습니다.

SELECT distinct customer_id, sales_ymd FROM receipt: 'receipt' 테이블에서 distinct customer ID와 sales year-month-day를 선택한다.

SELECT c.customer_id, r.sales_ymd, c.application_date, EXTRACT(DAY FROM (TO_TIMESTAMP(CAST(r.sales_ymd AS VARCHAR), 'YYYYMMDD') - TO_THEMESTAMP(c.application_date, EXTRACT(DAY FROM (TO_TIMESTAMP(CAST(r.sales_ymd AS VARCHAR), 'YYYYMMDD') - TO_THEMESTAMP(c.application_date)) TIMESTAMP(c.application_date, 'YYYYMMDD'))) )) AS elapsed_days FROM receipt_distinct r JOIN customer c ON r.customer_id = c.customer_id LIMIT 10: 이 는 고객 ID, 판매일자, 신청일, 고객의 신청일로부터 해당 고객이 판매한 명세서 날짜까지의 경과일수를 선택한다. 경과일수 계산은 판매일자와 신청일을 타임스탬프로 변환하여 그 차이를 일수로 계산한다. 마지막으로 'receipt_distinct' CTE와 'customer' 테이블을 고객 ID로 결합하고 출력을 처음 10줄로 제한한다.

요약하면, 이 코드에서는 먼저 'receipt' 테이블에서 고객 ID와 매출 연/월/일을 선택하고, 이를 'customer' 테이블과 결합하여 고객의 신청일을 가져와서 고객의 신청일과 해당 고객의 개별 매출일 사이에 경과한 일수를 계산하고 있다. 다음으로 판매일과 신청일을 타임스탬프로 변환하고 그 차이를 일수로 계산하는 계산이 이루어진다. 이는 CTE를 이용해 필요한 데이터를 일시적으로 저장하고, 해당 데이터에 대해 산술 연산과 결합을 수행함으로써 실현된다.

 

설명:

이 코드는 SQL로 작성되었으며, 'receive_distinct'와 'time_age_tbl'이라는 두 개의 공통 테이블 표현식(CTE)을 사용하여 'receive'와 'customer'라는 두 개의 테이블에서 데이터를 선택하는 데 사용된다. 이 코드는 고객의 신청일과 해당 고객이 별도의 판매를 한 날짜 사이의 경과 개월 수를 계산한다.

다음은 코드의 단계별 예시입니다.

WITH receipt_distinct AS (...) : 괄호로 둘러싸인 SELECT 문에서 데이터를 일시적으로 저장하는 데 사용되는 'receipt_distinct'라는 이름의 공통 테이블 표현식(CTE)을 정의하고 있다.

SELECT DISTINCT customer_id, sales_ymd FROM receipt: 'receipt' 테이블에서 distinct customer ID와 sales year-month-day를 선택한다.

WITH time_age_tbl AS (...) : 이것은 괄호로 둘러싸인 SELECT 문의 데이터를 일시적으로 저장하기 위해 사용되는 'time_age_tbl'이라는 이름의 또 다른 CTE를 정의하는 것이다.

SELECT c.customer_id, r.sales_ymd, c.application_date, AGE(TO_TIMESTAMP(CAST(r.sales_ymd AS VARCHAR), 'YYYYMMDD'), TO_TIMESTAMP(c. application_date, 'YYYYMMMDD')))) AS time_age FROM receipt_distinct r JOIN customer c ON r.customer_id = c.customer_id: 고객 ID, 매출일자, 신청일, 그리고 고객의 신청일로부터 해당 고객의 신청일로부터 해당 고객이 진행한 개별 판매일까지의 경과 시간을 선택하는 것이다. 경과시간 계산은 판매일자와 신청일을 타임스탬프로 변환하고 AGE 함수를 사용하여 그 차이를 계산한다. 마지막으로 'receipt_distinct' CTE와 'customer' 테이블을 고객 ID로 결합한다.

SELECT customer_id, sales_ymd, application_date, EXTRACT(YEAR FROM time_age) * 12 + EXTRACT(MONTH FROM time_age) AS elapsed_months FROM time_age_. tbl LIMIT 10: 고객 ID, 판매일자, 신청일, 고객의 신청일로부터 해당 고객이 진행한 개별 판매일까지의 경과 개월 수를 선택한다. 경과 개월 수 계산은 경과시간의 년 성분과 월 성분을 추출하여 월수로 변환합니다. 마지막으로 출력을 처음 10줄로 제한하고 있습니다.

요약하면, 이 코드에서는 먼저 'receive' 테이블에서 고객 ID와 매출 연도를 선택하고, 'customer' 테이블과 결합하여 고객의 신청일을 가져와서 고객의 신청일로부터 해당 고객의 개별 매출일까지의 경과 개월 수를 계산합니다. 그런 다음 CTE와 AGE 함수를 사용하여 판매일과 신청일 사이의 경과 시간을 계산하고 그 결과를 월 단위로 변환한다. 이는 두 개의 CTE를 사용하여 필요한 데이터를 일시적으로 저장하고, 해당 데이터에 대해 산술 연산과 결합을 수행함으로써 이루어진다.
 
설명:

이 SQL 코드는 구매 고객의 고객 ID, 판매일, 신청일을 취득하고 신청일과 판매일 사이의 경과 연수를 계산한다.

이 코드에서는 먼저 receipt_distinct라는 공통 테이블 식을 생성하고, receipt 테이블에서 고객 ID와 판매 날짜의 개별 조합을 선택합니다. 이렇게 하면 각 고객이 여러 번 구매하더라도 한 번만 계산되도록 보장할 수 있다.

메인 쿼리에서는 receipt_distinct 테이블에서 고객 ID, 판매일, 신청일을 선택하고 EXTRACT 함수를 사용하여 신청일과 판매일 사이의 경과 연도를 계산하고 AGE 함수로 두 날짜의 시간차를 계산하고 EXTRACT 함수로 결과의 간격에서 연도 성분을 추출한다.

결과는 각 고객의 고객 ID, 판매일, 신청일, 경과 연도를 나타내는 표로 만들어지며, LIMIT 구문은 결과 집합의 첫 10행으로 출력을 제한하는 데 사용된다.

 

설명:

이 SQL 코드는 구매 고객의 고객 ID, 판매일, 신청일을 가져와 신청일과 판매일 사이의 경과 시간을 계산한다.

이 코드에서는 먼저 receipt_distinct라는 공통 테이블 식을 만들고, receipt 테이블에서 고객 ID와 판매 날짜의 개별 조합을 선택합니다. 이렇게 하면 각 고객이 여러 번 구매하더라도 한 번만 계산되도록 보장할 수 있다.

다음으로 메인 쿼리에서 receipt_distinct 테이블에서 고객 ID, 판매일, 신청일을 선택하고 EXTRACT 함수와 TO_TIMESTAMP 함수를 사용하여 신청일과 판매일 사이의 경과 초를 계산합니다. 를 사용하여 결과의 간격에서 초를 추출하고 있습니다.

결과는 각 고객의 고객 ID, 판매일, 신청일, 경과 초수를 나타내는 표이며, LIMIT 구문은 결과 집합의 처음 10줄로 출력을 제한하는 데 사용된다.
 
설명:

이 SQL 코드는 elapsed_days_tbl이라는 공통 테이블 표현식(CTE)을 정의하는 것으로 시작한다. 이 CTE는 영수증 테이블의 각 sales_ymd 날짜의 요일(0에서 6까지의 숫자, 0은 일요일)을 추출한다.

메인 쿼리에서는 elapsed_days_tbl CTE에서 sales_ymd와 elapsed_days가 선택되어 있다. 그런 다음 이 코드에서는 sales_ymd에서 elapsed_days를 빼서 새로운 날짜를 계산한다. 이는 elapsed_days를 정수로 변환하고 sales_ymd에서 빼는 방식으로 이루어집니다. 결과 날짜는 sales_ymd의 날짜에 해당하는 주 월요일이 된다.

코드 마지막에 있는 LIMIT 10 구문은 출력을 처음 10줄로 제한한다.
 
설명:

이 SQL 코드는 customer 테이블에서 10명의 고객 중 임의의 하위 집합을 선택하는 것으로, RANDOM() 함수는 테이블의 각 행에 대해 0에서 1 사이의 임의의 값을 생성하고, WHERE 구문은 생성된 값이 0.01 이하(선택될 확률 1%)인지 여부에 따라 행을 필터링합니다. 에 따라 행을 필터링합니다.

이는 테이블의 다른 조건이나 순서에 관계없이 각 행이 선택될 확률이 동일하다는 것을 의미하며, LIMIT 절은 조건을 충족하는 처음 10개의 행으로 출력을 제한하는 데 사용된다.
 
 
설명:

이 코드는 SQL 프로그래밍 언어를 사용하여 "customer" 테이블에서 임의의 고객 하위 집합을 선택하는 코드입니다.

이 코드에서는 먼저 "customer" 테이블에서 모든 열을 선택하고 ROW_NUMBER 함수와 COUNT 함수를 사용하여 두 개의 열을 추가하여 "customer_tmp"라는 임시 테이블을 생성합니다.

ROW_NUMBER 함수는 ORDER BY RANDOM() 구문의 결과에 따라 테이블의 각 행에 고유한 정수를 할당한다. 이렇게 하면 테이블의 행 순서가 효과적으로 무작위화된다.

OVER() 절이 있는 COUNT 함수는 테이블의 총 행 수를 계산하고 각 행의 이 수를 포함하는 "cnt"라는 새로운 열을 생성한다.

그런 다음 메인 SELECT 문은 ROW_NUMBER 함수로 생성된 "row" 열로 필터링하여 임시 테이블에서 고객의 하위 집합을 선택한다. 구체적으로 COUNT 함수로 생성된 "cnt" 열에 의해 결정되는 처음 1%의 행을 선택한다.

마지막 절 "LIMIT 10"은 결과를 하위 집합의 처음 10 개 행으로 제한하여 원래 "customer"테이블에서 10 명의 고객 무작위 샘플을 효과적으로 반환합니다.

전체적으로 이 코드는 테스트 및 탐색적 분석 목적으로 큰 테이블에서 무작위 고객 샘플을 선택하는 간단한 방법이다. 샘플링 비율(이 경우 1%)을 조정하여 더 큰 샘플이나 더 작은 샘플을 만들 수 있습니다.
 
설명:

이 SQL 코드는 "customer"라는 테이블에서 임의의 고객 샘플을 선택하고, 샘플 내 각 성별에 해당하는 고객 수를 계산하고 있다.

아래는 코드의 각 파트가 수행하는 작업의 내역입니다.

WITH 구문: 이 구문은 후속 SELECT 문에서 사용할 두 개의 임시 테이블인 'customer_random'과 'customer_rownum'을 생성한다.

customer_random 테이블. 이 테이블은 'customer' 테이블에서 고객의 무작위 샘플을 선택하고 각 고객에게 성별에 따라 'customer_r' 값을 할당하며, 'cnt' 열은 각 성별 그룹의 총 고객 수를 계산한다.

customer_rownum 테이블. 이 테이블은 'customer_random' 테이블의 각 고객에게 성별로 구분된 행 번호("rn")를 추가한다.

SELECT 문. 이 문은 각 성별 그룹에서 행 번호가 해당 성별 그룹 내 총 고객 수의 10% 이하인 고객 수를 계산한다(즉, 행 번호 기준 상위 10%의 고객이다). 결과는 'gender_cd'와 'customer_num'의 두 열을 가진 표로, 'gender_cd'는 성별 코드, 'customer_num'은 해당 성별 그룹에서 행 번호로 상위 10%에 속하는 고객 수이다.

전체적으로 이 코드는 더 큰 데이터 세트에서 고객의 무작위 샘플을 선택하고 그 성별 분포를 분석하는 데 편리하다.

 

설명:

이 코드는 SQL 프로그래밍 언어를 사용하여 "customer" 테이블에서 고객의 하위 집합을 무작위로 선택하고 성별에 따라 그룹화하여 각 성별 그룹의 고객 수를 반환하는 코드입니다.

이 코드에서는 먼저 'customer' 테이블에서 모든 열을 선택하고 ROW_NUMBER 함수와 COUNT 함수를 사용하여 두 개의 열을 추가하여 'cusotmer_random'이라는 임시 테이블을 생성합니다.

ROW_NUMBER 함수는 ORDER BY RANDOM() 구문의 결과에 따라 테이블의 각 행에 고유한 정수를 할당한다. 이는 테이블의 행 순서를 효과적으로 무작위화합니다.

ROW_NUMBER 함수의 PARTITION BY gender_cd 구문은 각 성별 그룹에 대해 개별적으로 무작위 순서를 보장한다.

OVER(PARTITION BY gender_cd) 절이 있는 COUNT 함수는 각 성별 그룹의 총 행 수를 계산하고 각 행의 이 카운트를 포함하는 'cnt'라는 새로운 열을 생성한다.

다음으로 메인 SELECT 문은 ROW_NUMBER 함수로 생성된 'rn' 열로 필터링하여 임시 테이블에서 고객의 하위 집합을 선택한다. 구체적으로 COUNT 함수로 생성된 "cnt" 컬럼에 의해 결정되는 각 성별 그룹 행의 처음 10%를 선택한다.

WHERE 절은 'cusotmer_random' 테이블의 행을 필터링하여 'rn' 값이 각 성별 그룹의 'cnt' 값의 10% 이하인 것만 포함한다.

마지막으로, 메인 SELECT 문은 gender_cd로 행을 그룹화하고 각 그룹의 행 수를 반환하여 효과적으로 무작위 샘플의 각 성별 그룹의 고객 수를 제공합니다.

전체적으로 이 코드는 큰 테이블에서 고객의 하위 집합을 무작위로 선택하면서 샘플이 원래 테이블과 마찬가지로 각 성별 그룹의 비율을 포함하도록 보장하는 방법이다. 샘플링 비율(이 경우 10%)은 더 크거나 작은 샘플을 만들기 위해 조정할 수 있습니다.
 
설명:

이 코드는 SQL 프로그래밍 언어를 사용하여 대수 변환된 구매 금액을 기준으로 구매 금액 합계가 표준에서 크게 벗어난 고객을 식별합니다.

이 코드에서는 먼저 "영수증" 테이블에서 customer_id와 구매 금액의 합계를 선택하고 customer_id로 그룹화하여 "sales_amount"라는 임시 테이블을 생성합니다. 또한, 구매 금액 합계는 LN 함수를 사용하여 대수 변환하여 0의 대수를 취하지 않도록 0.5를 더합니다.

다음으로 메인 SELECT 문은 임시 테이블에서 customer_id, sum_amount, log_sum_amount 컬럼을 선택한다. 또한 CROSS JOIN을 사용하여 "stats_amount"라는 또 다른 임시 테이블에 참여한다." "stats_amount"는 "sales_amount" 테이블에서 log_sum_amount 열의 평균과 모표준편차를 선택하여 생성한다.

WHERE 절은 "sales_amount" 테이블의 행을 필터링하여 log_sum_amount와 평균 log_sum_amount의 차이의 절대값을 log_sum_amount의 표준편차로 나누어 3보다 큰 것들만 포함한다. 이는 구매 금액이 평균값에서 3표준편차 이상 떨어져 있는 고객을 식별하는 방법이며, 통계 분석에서 이상값을 식별하는 일반적인 임계값이다.

마지막으로, 메인 SELECT 문은 출력을 10줄로 제한한다.

전체적으로 이 코드는 구매 금액을 대수 척도로 변환하고 통계적 이상치 탐지 기준을 적용하여 데이터 세트의 평균 구매 금액에 비해 현저하게 큰 구매 또는 작은 구매를 한 고객을 식별하는 방법이다.
 
설명:

이 코드는 SQL 프로그래밍 언어를 사용하여 데이터베이스를 쿼리하고 있다. 구체적으로 CTE(Common Table Expression)를 사용하여 'sales_amount'라는 임시 테이블을 생성하고 'receive' 테이블의 각 고객에 대한 총 매출액을 계산한다.

CTE의 WHERE 구문은 ID가 "Z"로 시작하는 고객을 필터링하여 제외하며, GROUP BY 구문은 고객 ID별로 매출을 그룹화한다.

메인 쿼리에서는 'sales_amount' 테이블과 PERCENTILE_CONT 함수를 사용하여 매출 금액의 25번째 백분위수와 75번째 백분위수를 계산하는 서브 쿼리 사이에 CROSS JOIN이 수행된다. 이 백분위수는 "stats_amount"라는 임시 테이블에 저장된다.

마지막으로 메인 쿼리의 WHERE 구문에서 25분위수나 75분위수에서 사분위수 범위(IQR)의 1.5배 이상 떨어져 있는 매출 금액을 필터링하여 제외한다. 이는 데이터 세트의 이상값을 식별하는 일반적인 방법이다. 결과는 상위 10개 라인으로 제한됩니다.

전체적으로 이 코드는 데이터베이스를 조회하여 사분위수 범위 내의 위치에 따라 동종업계에 비해 비정상적으로 높은 또는 낮은 매출 금액을 가진 고객을 식별하는 것이다.
 
설명:

이 코드는 SQL 프로그래밍 언어를 사용하여 데이터베이스를 쿼리하고 있다. 구체적으로 "product" 테이블을 조회하고 SUM 문과 CASE 문을 조합하여 테이블의 각 열에서 누락된 값(NULL)의 개수를 계산하고 있습니다.

이 쿼리에서는 6개의 컬럼을 선택하고 테이블의 컬럼 이름과 일치하는 별칭을 부여하고 있다. 'product_cd', 'category_major_cd', 'category_medium_cd', 'category_small_cd', 'unit_price', 'unit_cost'.

각 컬럼에 대해 CASE 문은 값이 NULL인지 여부를 확인하고, NULL이면 1을, 그렇지 않으면 0을 반환한다. 그리고 SUM 함수로 1과 0을 합하여 각 열의 NULL 값의 총 개수를 구한다.

LIMIT 10 구문은 결과를 테이블의 처음 10개의 행으로 제한하지만, 이 경우 요약 통계에만 관심이 있기 때문에 별 의미가 없을 것입니다.

전체적으로 이 코드는 "product" 테이블의 누락된 데이터를 확인하고 각 열의 누락된 값의 수에 대한 간단한 요약을 얻을 수 있는 간단한 방법이다.

 

설명:

이 코드는 SQL 프로그래밍 언어를 사용하여 'product' 테이블에서 'unit_price' 열과 'unit_cost' 열이 모두 NULL이 아닌 행만 선택하여 'product_1'이라는 새로운 테이블을 생성하고 있다.

첫 번째 행의 'DROP TABLE IF EXISTS product_1;'은 'product_1' 테이블이 이미 존재하는지 확인하고, 존재하는 경우 삭제하여 새로 생성하는 테이블과 충돌을 피하기 위한 안전장치이다.

두 번째 행의 'CREATE TABLE product_1 AS (...) ;'는 'product_1'이라는 새로운 테이블을 생성하고, 그 내용은 SELECT 문 결과를 기반으로 한다는 것을 지정한다.

SELECT 문은 product 테이블에서 모든 열을 선택하지만, WHERE 구문이 포함되어 unit_price 또는 unit_cost 열이 NULL인 행을 필터링한다.

전체적으로 이 코드는 원래의 "product" 테이블에서 "unit_price"와 "unit_cost" 두 열에 모두 유효한 데이터가 있는 행만 포함하는 새 테이블을 생성합니다. 이는 데이터를 정리하고 분석 및 모델링에 대비하기 위한 일반적인 방법이다. 누락된 데이터는 일부 분석 기법에서 문제를 일으킬 수 있기 때문이다.




Comment