데이터 사이언스 100번의 노크(구조화 데이터 처리편) – SQL Part 1 (Q1 to Q20)의 해설입니다.
참고(Reference) : 「데이터 사이언티스트 협회 스킬 정의 위원」의 「데이터 사이언스 100번의 노크(구조화 데이터 처리편)」입니다.
처음에
- 데이터베이스는 PostgreSQL13입니다.
- 먼저 다음 셀을 실행합니다.
- 셀에 %%sql을 명시하여 SQL을 발행할 수 있습니다.
-
jupyter에서는 describe 명령으로 테이블 구조를 확인할 수 없으므로, 테이블 구조를 확인하려면 limit을 지정한 SELECT 등으로 대체해 주세요.
- 익숙한 SQL 클라이언트를 사용해도 문제 없습니다(접속 정보는 아래와 같습니다).
- IP 주소 : Docker Desktop의 경우 localhost, Docker toolbox의 경우 192.168.99.100
- Port:5432
- database 이름: dsdojo_db
- 사용자 이름: padawan
- 비밀번호:padawan12345
- 대량 출력을 하면 Jupyter가 멈출 수 있으므로 출력 건수를 제한하는 것을 권장합니다(질문에도 출력 건수를 기재).
- 결과 확인을 위해 표시하는 양을 적절히 조절하여 작업을 가볍게 진행할 수 있는 기술도 데이터 처리에는 필요합니다.
- 대량의 결과가 출력된 경우, 파일이 무거워져 이후 열리지 않을 수 있습니다.
- 이 경우, 작업 결과는 사라지지만 파일을 GitHub에서 다시 불러와야 합니다.
- vim 에디터 등으로 대량 출력 범위를 삭제할 수도 있습니다.
- 이름, 주소 등은 더미 데이터이며 실제 존재하는 것이 아닙니다.
%load_ext sql
import os
pgconfig = {
'host': 'db',
'port': os.environ['PG_PORT'],
'database': os.environ['PG_DATABASE'],
'user': os.environ['PG_USER'],
'password': os.environ['PG_PASSWORD'],
}
dsl = 'postgresql://{user}:{password}@{host}:{port}/{database}'.format(**pgconfig)
# Magic 명령어로 SQL을 작성하기 위한 환경 설정
%sql $dsl
'Connected: padawan@dsdojo_db'
사용법
셀의 맨 앞에 %%sql을 기재하고, 두 번째 줄 이후에 SQL을 작성하면 Jupyter에서 PostgreSQL에 대해 SQL을 실행할 수 있습니다.
%%sql
SELECT '다음과 같이 실행됩니다' AS sample;
* postgresql://padawan:***@db:5432/dsdojo_db 1 rows affected.
sample |
---|
다음과 같이 실행됩니다 |
데이터 가동 100번 노크
S-001: 영수증 내역 데이터(df_receipt)에서 전체 항목 중 첫 10건을 표시하여 어떤 데이터를 보유하고 있는지 목시으로 확인하라.
%%sql
SELECT
*
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
sales_ymd | sales_epoch | store_cd | receipt_no | receipt_sub_no | customer_id | product_cd | quantity | amount |
---|---|---|---|---|---|---|---|---|
20181103 | 1541203200 | S14006 | 112 | 1 | CS006214000001 | P070305012 | 1 | 158 |
20181118 | 1542499200 | S13008 | 1132 | 2 | CS008415000097 | P070701017 | 1 | 81 |
20170712 | 1499817600 | S14028 | 1102 | 1 | CS028414000014 | P060101005 | 1 | 170 |
20190205 | 1549324800 | S14042 | 1132 | 1 | ZZ000000000000 | P050301001 | 1 | 25 |
20180821 | 1534809600 | S14025 | 1102 | 2 | CS025415000050 | P060102007 | 1 | 90 |
20190605 | 1559692800 | S13003 | 1112 | 1 | CS003515000195 | P050102002 | 1 | 138 |
20181205 | 1543968000 | S14024 | 1102 | 2 | CS024514000042 | P080101005 | 1 | 30 |
20190922 | 1569110400 | S14040 | 1102 | 1 | CS040415000178 | P070501004 | 1 | 128 |
20170504 | 1493856000 | S13020 | 1112 | 2 | ZZ000000000000 | P071302010 | 1 | 770 |
20191010 | 1570665600 | S14027 | 1102 | 1 | CS027514000015 | P071101003 | 1 | 680 |
해설:
이 코드는 관계형 데이터베이스를 관리하고 조작하기 위한 프로그래밍 언어인 SQL(Structured Query Language)로 작성되었습니다.
이 코드에서는 "receipt"라는 이름의 테이블을 조회하고 별표(*) 와일드카드 문자를 사용하여 테이블의 모든 열과 행을 선택하고 있다. 쿼리 끝에 있는 "LIMIT 10" 구문은 결과 집합을 테이블의 처음 10개의 행으로 제한하고 있다.
간단히 말해, 이 코드는 데이터베이스의 'receipt' 테이블에서 처음 10개의 행을 추출하고 있는 것이다. 'receipt' 테이블 데이터의 정확한 의미와 구조는 데이터베이스의 스키마와 저장된 정보에 따라 달라질 수 있다.
S-002: 영수증 내역 데이터(df_receipt)에서 판매일자(sales_ymd), 고객 아이디(customer_id), 상품코드(product_cd), 판매금액(amount)의 순서로 열을 지정하여 10건씩 표시하라.
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
amount
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20181103 | CS006214000001 | P070305012 | 158 |
20181118 | CS008415000097 | P070701017 | 81 |
20170712 | CS028414000014 | P060101005 | 170 |
20190205 | ZZ000000000000 | P050301001 | 25 |
20180821 | CS025415000050 | P060102007 | 90 |
20190605 | CS003515000195 | P050102002 | 138 |
20181205 | CS024514000042 | P080101005 | 30 |
20190922 | CS040415000178 | P070501004 | 128 |
20170504 | ZZ000000000000 | P071302010 | 770 |
20191010 | CS027514000015 | P071101003 | 680 |
해설:
이 코드도 SQL(Structured Query Language)로 작성되었으며, "receipt"라는 이름의 테이블을 조회하고 있다.
SELECT 문을 사용하여 특정 열 "sales_ymd", "customer_id", "product_cd", "amount"를 선택하고 있습니다. 이 열들은 판매일, 구매를 한 고객의 ID, 구매한 상품의 코드, 구매 금액 등 구매 거래와 관련된 다양한 정보를 나타낸다.
쿼리 끝에 있는 "LIMIT 10" 구문은 결과 집합을 테이블의 첫 10개의 행으로 제한한다. 즉, 이 쿼리는 'RECIPATE' 테이블에 기록된 처음 10개의 거래 데이터만 반환한다.
요약하면, 이 코드는 'sales_ymd', 'customer_id', 'product_cd', 'amount'라는 컬럼을 통해 데이터베이스의 'receive' 테이블에 기록된 처음 10건의 거래에 대한 특정 정보를 가져오는 것이다. 'RECEIVE' 테이블의 데이터의 정확한 의미와 구조는 데이터베이스의 스키마와 그 안에 저장된 정보에 따라 달라질 수 있다.
S-003: 영수증 내역 데이터(df_receipt)에서 매출일자(sales_ymd), 고객 ID(customer_id), 상품코드(product_cd), 매출금액(amount) 순으로 열을 지정하여 10건씩 표시한다. 단, sales_ymdsales_date로 항목명을 변경하면서 추출한다.
%%sql
SELECT
sales_ymd AS sales_date,
customer_id,
product_cd,
amount
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
sales_date | customer_id | product_cd | amount |
---|---|---|---|
20181103 | CS006214000001 | P070305012 | 158 |
20181118 | CS008415000097 | P070701017 | 81 |
20170712 | CS028414000014 | P060101005 | 170 |
20190205 | ZZ000000000000 | P050301001 | 25 |
20180821 | CS025415000050 | P060102007 | 90 |
20190605 | CS003515000195 | P050102002 | 138 |
20181205 | CS024514000042 | P080101005 | 30 |
20190922 | CS040415000178 | P070501004 | 128 |
20170504 | ZZ000000000000 | P071302010 | 770 |
20191010 | CS027514000015 | P071101003 | 680 |
해설:
이 코드도 SQL(Structured Query Language)로 작성되었으며, "receipt"라는 이름의 테이블을 조회하고 있다.
SELECT 문은 "receive" 테이블에서 특정 컬럼의 데이터를 가져오기 위해 사용됩니다. 하지만 이 경우 AS 키워드를 사용하여 컬럼 이름을 변경하고 있습니다. 첫 번째 컬럼은 'sales_ymd'에서 'sales_date'로 이름이 변경되었습니다. 다른 컬럼인 'customer_id', 'product_cd', 'amount'는 원래 이름 그대로 유지됩니다.
쿼리 끝에 있는 "LIMIT 10" 구문은 결과 집합을 테이블의 처음 10개의 행으로 제한한다. 즉, 이 쿼리는 'RECIPATE' 테이블에 기록된 처음 10개의 거래 데이터만 반환한다.
요약하면, 이 코드는 수정된 열 이름 'sales_date', 'customer_id', 'product_cd', 'amount'를 사용하여 데이터베이스의 'receive' 테이블에 기록된 처음 10건의 거래에 대한 특정 열을 가져온다. 'receive' 테이블의 데이터의 정확한 의미와 구조는 데이터베이스의 스키마와 저장된 정보에 따라 달라질 수 있다.
S-004: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 금액(amount) 순으로 열을 지정하고, 다음 조건을 만족하는 데이터를 추출하시오.
- 고객 ID(customer_id)가 “CS018205000001″이다.
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
;
* postgresql://padawan:***@db:5432/dsdojo_db 12 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20180911 | CS018205000001 | P071401012 | 2200 |
20180414 | CS018205000001 | P060104007 | 600 |
20170614 | CS018205000001 | P050206001 | 990 |
20170614 | CS018205000001 | P060702015 | 108 |
20190216 | CS018205000001 | P071005024 | 102 |
20180414 | CS018205000001 | P071101002 | 278 |
20190226 | CS018205000001 | P070902035 | 168 |
20190924 | CS018205000001 | P060805001 | 495 |
20190226 | CS018205000001 | P071401020 | 2200 |
20180911 | CS018205000001 | P071401005 | 1100 |
20190216 | CS018205000001 | P040101002 | 218 |
20190924 | CS018205000001 | P091503001 | 280 |
해설:
이 코드도 SQL(Structured Query Language)로 작성되었으며, "receipt"라는 이름의 테이블을 조회하고 있다.
SELECT 문은 "receive" 테이블에서 특정 데이터 컬럼을 가져오는데 사용된다. 선택된 컬럼은 'sales_ymd', 'customer_id', 'product_cd', 'amount'입니다. 이 열들은 판매일, 구매한 고객의 ID, 구매한 상품의 코드, 구매 금액 등 구매 거래와 관련된 다양한 정보를 나타낸다.
FROM 문은 데이터를 가져올 '영수증' 테이블을 지정한다.
WHERE 구문은 특정 조건에 따라 데이터를 필터링하는 데 사용됩니다. 이 경우 'customer_id' 컬럼이 'CS018205000001'과 같다는 조건에 따라 데이터가 필터링된다. 즉, 이 쿼리는 ID가 'CS018205000001'인 고객이 수행한 거래에 대한 데이터만 가져오는 것이다.
요약하면, 이 코드는 데이터베이스의 'receipate' 테이블에서 특정 열의 정보를 가져오는데, ID가 'CS018205000001'인 특정 고객이 수행한 거래에 대해서만 가져온다는 것이다. 'receipate' 테이블의 데이터의 정확한 의미와 구조는 데이터베이스의 스키마와 저장된 정보에 따라 달라진다.
S-005: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 금액(amount)의 순서로 열을 지정하고, 아래 조건을 모두 만족하는 데이터를 추출하라.
- 고객 ID(customer_id)가 “CS018205000001”
- 매출 금액(amount)이 1,000 이상
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
AND amount >= 1000
;
* postgresql://padawan:***@db:5432/dsdojo_db 3 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20180911 | CS018205000001 | P071401012 | 2200 |
20190226 | CS018205000001 | P071401020 | 2200 |
20180911 | CS018205000001 | P071401005 | 1100 |
해설:
이 코드도 SQL(Structured Query Language)로 작성되었으며, "receipt"라는 이름의 테이블을 조회하고 있다.
SELECT 문은 "receive" 테이블에서 특정 데이터 컬럼을 가져오는데 사용된다. 선택된 컬럼은 'sales_ymd', 'customer_id', 'product_cd', 'amount'입니다. 이 열들은 판매일, 구매한 고객의 ID, 구매한 상품의 코드, 구매 금액 등 구매 거래와 관련된 다양한 정보를 나타낸다.
FROM 문은 데이터를 가져올 '영수증' 테이블을 지정한다.
WHERE 구문은 특정 조건에 따라 데이터를 필터링하는 데 사용된다. 이 경우 두 가지 조건에 따라 데이터가 필터링됩니다.
customer_id 컬럼이 'CS018205000001'과 같아야 한다.
금액 컬럼은 1000 이상이어야 한다.
즉, 이 쿼리는 ID가 'CS018205000001'인 고객이 거래한 금액이 1000 이상인 데이터만 가져온다는 뜻이다.
요약하면, 이 코드는 데이터베이스의 'receive' 테이블에서 특정 열의 정보를 가져오는데, ID가 'CS018205000001'인 특정 고객이 거래한 거래 중 금액이 1000 이상인 거래만 대상으로 한다. 영수증 테이블의 데이터의 정확한 의미와 구조는 데이터베이스의 스키마와 그 안에 저장된 정보에 따라 달라진다.
S-006: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 수량(quantity), 판매 금액(amount) 순으로 열을 지정하고, 다음 조건을 모두 만족하는 데이터를 추출하라. 추출하라.
- 고객 ID(customer_id)가 “CS018205000001”.
- 판매금액(amount)이 1,000 이상 또는 판매수량(quantity)이 5 이상
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
quantity,
amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
AND
(
amount >= 1000
OR quantity >= 5
)
;
* postgresql://padawan:***@db:5432/dsdojo_db 5 rows affected.
sales_ymd | customer_id | product_cd | quantity | amount |
---|---|---|---|---|
20180911 | CS018205000001 | P071401012 | 1 | 2200 |
20180414 | CS018205000001 | P060104007 | 6 | 600 |
20170614 | CS018205000001 | P050206001 | 5 | 990 |
20190226 | CS018205000001 | P071401020 | 1 | 2200 |
20180911 | CS018205000001 | P071401005 | 1 | 1100 |
해설:
이 코드도 SQL(Structured Query Language)로 작성되었으며, "receipt"라는 이름의 테이블을 조회하고 있다.
SELECT 문은 "receive" 테이블에서 특정 데이터 컬럼을 가져오는데 사용된다. 선택된 컬럼은 'sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount'입니다. 이 열들은 판매일, 구매한 고객의 ID, 구매한 상품의 코드, 구매한 상품의 수량, 구매 금액 등 구매 거래와 관련된 다양한 정보를 나타낸다.
FROM 문에서는 데이터를 가져올 '영수증' 테이블을 지정합니다.
WHERE 구문은 특정 조건에 따라 데이터를 필터링하는 데 사용된다. 이 경우 두 가지 조건에 따라 데이터가 필터링됩니다.
customer_id 컬럼이 'CS018205000001'과 같아야 한다.
트랜잭션은 다음 두 가지 조건 중 하나 이상을 충족해야 한다: a. '금액' 컬럼이 1000 이상일 것. b. '수량' 컬럼이 5 이상일 것.
즉, 이 쿼리는 ID가 'CS018205000001'인 고객이 거래한 금액이 1000 이상 또는 수량이 5 이상인 데이터만 가져온다는 뜻이다.
요약하면, 이 코드는 데이터베이스의 'receipate' 테이블에서 특정 열의 정보를 가져오는데, ID가 'CS018205000001'인 특정 고객이 수행한 거래 중 금액이 1000 이상 또는 수량이 5 이상인 거래만을 대상으로 한다. 영수증 테이블의 데이터의 정확한 의미와 구조는 데이터베이스의 스키마와 그 안에 저장된 정보에 따라 달라진다.
S-007: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 금액(amount)의 순서로 열을 지정하고, 아래 조건을 모두 만족하는 데이터를 추출하라.
- 고객 ID(customer_id)가 “CS018205000001”
- 매출 금액(amount)이 1,000 이상 2,000 이하
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
AND amount BETWEEN 1000 AND 2000
;
* postgresql://padawan:***@db:5432/dsdojo_db 1 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20180911 | CS018205000001 | P071401005 | 1100 |
해설:
이 코드도 SQL(Structured Query Language)로 작성되었으며, "receipt"라는 이름의 테이블을 조회하고 있다.
SELECT 문은 "receive" 테이블에서 특정 데이터 컬럼을 가져오는데 사용된다. 선택된 컬럼은 'sales_ymd', 'customer_id', 'product_cd', 'amount'입니다. 이 열들은 판매일, 구매한 고객의 ID, 구매한 상품의 코드, 구매 금액 등 구매 거래와 관련된 다양한 정보를 나타낸다.
FROM 문은 데이터를 가져올 '영수증' 테이블을 지정한다.
WHERE 구문은 특정 조건에 따라 데이터를 필터링하는 데 사용된다. 이 경우 두 가지 조건에 따라 데이터가 필터링됩니다.
customer_id 컬럼이 'CS018205000001'과 같아야 한다.
금액 컬럼은 1000에서 2000 사이여야 한다.
즉, 이 쿼리는 ID가 'CS018205000001'인 고객이 거래한 금액이 1000에서 2000 사이인 데이터만 가져오는 것이다(단, 1000에서 2000 사이는 포함된다).
WHERE 절의 BETWEEN 연산자는 값의 범위에 따라 결과를 필터링하는 데 사용된다. 이 경우 '금액' 컬럼이 1000에서 2000 사이에 있는 트랜잭션(포함)을 가져오는 데 사용됩니다.
요약하면, 이 코드는 데이터베이스의 'receipt' 테이블에서 특정 열의 정보를 가져오고 있지만, ID가 'CS018205000001'인 특정 고객이 수행한 거래 중 금액이 1000에서 2000 사이인 거래로 제한하고 있다. 영수증 테이블 데이터의 정확한 의미와 구조는 데이터베이스의 스키마와 저장된 정보에 따라 달라진다.
S-008: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 금액(amount)의 순서로 열을 지정하고, 아래 조건을 모두 만족하는 데이터를 추출하라.
- 고객 ID(customer_id)가 “CS018205000001”
- 상품코드(product_cd)가 “P071401019” 이외
%%sql
SELECT
sales_ymd,
customer_id,
product_cd, amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
AND product_cd != 'P071401019'
;
* postgresql://padawan:***@db:5432/dsdojo_db 12 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20180911 | CS018205000001 | P071401012 | 2200 |
20180414 | CS018205000001 | P060104007 | 600 |
20170614 | CS018205000001 | P050206001 | 990 |
20170614 | CS018205000001 | P060702015 | 108 |
20190216 | CS018205000001 | P071005024 | 102 |
20180414 | CS018205000001 | P071101002 | 278 |
20190226 | CS018205000001 | P070902035 | 168 |
20190924 | CS018205000001 | P060805001 | 495 |
20190226 | CS018205000001 | P071401020 | 2200 |
20180911 | CS018205000001 | P071401005 | 1100 |
20190216 | CS018205000001 | P040101002 | 218 |
20190924 | CS018205000001 | P091503001 | 280 |
해설:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스를 쿼리하고 있다.
이 쿼리는 SELECT 문을 사용하여 "RECIPATE" 테이블에서 데이터를 선택하고 있습니다.
선택된 컬럼은 다음과 같습니다. "sales_ymd", "customer_id", "product_cd", "amount"입니다.
이 쿼리는 'customer_id'가 'CS018205000001'과 같고 'product_cd'가 'P0714019'와 같지 않은 레코드만 선택하여 데이터를 필터링하고 있다.
즉, 이 쿼리는 customer_id 'CS018205000001'에 대해 product_cd가 'P071401019'인 레코드를 제외한 모든 레코드를 반환한다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령을 통해 SQL 코드를 노트북 내에서 직접 실행할 수 있다.
S-009: 다음 처리에서 출력 결과를 바꾸지 않고 OR을 AND로 다시 작성하시오.
SELECT * FROM store WHERE NOT (prefecture_cd = '13' OR floor_area > 900)
%%sql
SELECT * FROM store WHERE prefecture_cd != '13' AND floor_area <= 900;
* postgresql://padawan:***@db:5432/dsdojo_db 3 rows affected.
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
S12013 | 習志野店 | 12 | 千葉県 | 千葉県習志野市芝園一丁目 | チバケンナラシノシシバゾノイッチョウメ | 047-123-4002 | 140.022 | 35.66122 | 808.0 |
해설:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스에 대한 쿼리를 수행하고 있습니다.
SELECT 문을 사용하여 "store" 테이블의 모든 컬럼을 선택하고 있습니다.
이 쿼리는 'prefecture_cd'가 '13'과 같지 않고 'floor_area'가 900 이하인 레코드만 선택함으로써 데이터를 필터링하고 있다.
즉, 이 쿼리는 'store' 테이블에서 'prefecture_cd'가 13 이하이고 'floor_area'가 900 이하인 모든 레코드를 반환한다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령어를 통해 SQL 코드를 노트북 내에서 직접 실행할 수 있습니다.
S-010: 매장 데이터(df_store)에서 매장 코드(store_cd)가 “S14″로 시작하는 항목만 전체 추출하여 10개를 표시하라.
%%sql
SELECT
*
FROM store
WHERE
store_cd LIKE 'S14%'
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
S14036 | 相模原中央店 | 14 | 神奈川県 | 神奈川県相模原市中央二丁目 | カナガワケンサガミハラシチュウオウニチョウメ | 042-123-4045 | 139.3716 | 35.57327 | 1679.0 |
S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
S14022 | 逗子店 | 14 | 神奈川県 | 神奈川県逗子市逗子一丁目 | カナガワケンズシシズシイッチョウメ | 046-123-4036 | 139.5789 | 35.29642 | 1838.0 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
해설:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스를 쿼리하고 있다.
이 쿼리는 SELECT 문을 사용하여 "store" 테이블의 모든 컬럼을 선택하고 있다.
쿼리는 와일드카드 문자 '%'를 사용한 LIKE 연산자를 사용하여 'store_cd' 열이 'S14'로 시작하는 레코드만 선택함으로써 데이터를 필터링하고 있다.
또한 이 쿼리는 LIMIT 절을 사용하여 반환되는 레코드 수를 10으로 제한하고 있습니다.
즉, 이 쿼리는 'store' 테이블에서 'store_cd'가 'S14'로 시작하는 레코드를 최대 10개까지만 반환합니다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령어를 통해 SQL 코드를 노트북 내에서 직접 실행할 수 있다.
S-011: 고객 데이터(df_customer)에서 고객 ID(customer_id)의 끝자리가 1인 항목만 전체 추출하여 10건을 표시하라.
%%sql
SELECT * FROM customer WHERE customer_id LIKE '%1' LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS037613000071 | 六角 雅彦 | 9 | 不明 | 1952-04-01 | 66 | 136-0076 | 東京都江東区南砂********** | S13037 | 20150414 | 0-00000000-0 |
CS028811000001 | 堀井 かおり | 1 | 女性 | 1933-03-27 | 86 | 245-0016 | 神奈川県横浜市泉区和泉町********** | S14028 | 20160115 | 0-00000000-0 |
CS040412000191 | 川井 郁恵 | 1 | 女性 | 1977-01-05 | 42 | 226-0021 | 神奈川県横浜市緑区北八朔町********** | S14040 | 20151101 | 1-20091025-4 |
CS028314000011 | 小菅 あおい | 1 | 女性 | 1983-11-26 | 35 | 246-0038 | 神奈川県横浜市瀬谷区宮沢********** | S14028 | 20151123 | 1-20080426-5 |
CS039212000051 | 藤島 恵梨香 | 1 | 女性 | 1997-02-03 | 22 | 166-0001 | 東京都杉並区阿佐谷北********** | S13039 | 20171121 | 1-20100215-4 |
CS015412000111 | 松居 奈月 | 1 | 女性 | 1972-10-04 | 46 | 136-0071 | 東京都江東区亀戸********** | S13015 | 20150629 | 0-00000000-0 |
CS004702000041 | 野島 洋 | 0 | 男性 | 1943-08-24 | 75 | 176-0022 | 東京都練馬区向山********** | S13004 | 20170218 | 0-00000000-0 |
CS041515000001 | 栗田 千夏 | 1 | 女性 | 1967-01-02 | 52 | 206-0001 | 東京都多摩市和田********** | S13041 | 20160422 | E-20100803-F |
CS029313000221 | 北条 ひかり | 1 | 女性 | 1987-06-19 | 31 | 279-0011 | 千葉県浦安市美浜********** | S12029 | 20180810 | 0-00000000-0 |
CS034312000071 | 望月 奈央 | 1 | 女性 | 1980-09-20 | 38 | 213-0026 | 神奈川県川崎市高津区久末********** | S14034 | 20160106 | 0-00000000-0 |
해설:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스를 쿼리하고 있습니다.
이 쿼리는 SELECT 문을 사용하여 'customer' 테이블의 모든 컬럼을 선택하고 있다.
쿼리는 와일드카드 문자 '%'를 사용한 LIKE 연산자를 사용하여 'customer_id' 열의 끝이 숫자 '1'인 레코드만 선택하여 데이터를 필터링하고 있습니다.
또한 LIMIT 절을 사용하여 반환되는 레코드 수를 10으로 제한하고 있습니다.
즉, 이 쿼리는 'customer_id'의 끝이 숫자 '1'인 'customer' 테이블에서 최대 10개의 레코드를 반환합니다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령어를 사용하면 노트북 내에서 SQL 코드를 직접 실행할 수 있다.
S-012: 점포 데이터(df_store)에서 주소(address)에 ‘요코하마시’가 포함된 항목만 모두 표시한다.
%%sql
SELECT * FROM store WHERE address LIKE '%横浜市%';
* postgresql://padawan:***@db:5432/dsdojo_db 11 rows affected.
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
S14048 | 中川中央店 | 14 | 神奈川県 | 神奈川県横浜市都筑区中川中央二丁目 | カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ | 045-123-4051 | 139.5758 | 35.54912 | 1657.0 |
S14042 | 新山下店 | 14 | 神奈川県 | 神奈川県横浜市中区新山下二丁目 | カナガワケンヨコハマシナカクシンヤマシタニチョウメ | 045-123-4047 | 139.6593 | 35.43894 | 1044.0 |
S14006 | 葛が谷店 | 14 | 神奈川県 | 神奈川県横浜市都筑区葛が谷 | カナガワケンヨコハマシツヅキククズガヤ | 045-123-4031 | 139.5633 | 35.53573 | 1886.0 |
해설:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스를 쿼리하고 있다.
이 쿼리는 SELECT 문을 사용하여 "store" 테이블의 모든 컬럼을 선택하고 있다.
쿼리는 와일드카드 문자 '%'가 포함된 LIKE 연산자를 사용하여 'address' 열에 'yokohama city' 문자열이 포함된 레코드만 선택함으로써 데이터를 필터링하고 있다.
즉, 이 쿼리는 'store' 테이블에서 'address' 열에 'yokohama city' 문자열이 포함된 모든 레코드를 반환한다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령어를 사용하면 노트북 내에서 SQL 코드를 직접 실행할 수 있습니다.
S-013: 고객 데이터(df_customer)에서 상태코드(status_cd)가 알파벳 A~F로 시작하는 데이터를 모두 추출하여 10건을 표시하라.
%%sql
SELECT * FROM customer WHERE status_cd ~ '^[A-F]' LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS031415000172 | 宇多田 貴美子 | 1 | 女性 | 1976-10-04 | 42 | 151-0053 | 東京都渋谷区代々木********** | S13031 | 20150529 | D-20100325-C |
CS015414000103 | 奥野 陽子 | 1 | 女性 | 1977-08-09 | 41 | 136-0073 | 東京都江東区北砂********** | S13015 | 20150722 | B-20100609-B |
CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
CS029415000023 | 梅田 里穂 | 1 | 女性 | 1976-01-17 | 43 | 279-0043 | 千葉県浦安市富士見********** | S12029 | 20150610 | D-20100918-E |
CS035415000029 | 寺沢 真希 | 9 | 不明 | 1977-09-27 | 41 | 158-0096 | 東京都世田谷区玉川台********** | S13035 | 20141220 | F-20101029-F |
CS031415000106 | 宇野 由美子 | 1 | 女性 | 1970-02-26 | 49 | 151-0053 | 東京都渋谷区代々木********** | S13031 | 20150201 | F-20100511-E |
CS029215000025 | 石倉 美帆 | 1 | 女性 | 1993-09-28 | 25 | 279-0022 | 千葉県浦安市今川********** | S12029 | 20150708 | B-20100820-C |
CS033605000005 | 猪股 雄太 | 0 | 男性 | 1955-12-05 | 63 | 246-0031 | 神奈川県横浜市瀬谷区瀬谷********** | S14033 | 20150425 | F-20100917-E |
CS033415000229 | 板垣 菜々美 | 1 | 女性 | 1977-11-07 | 41 | 246-0021 | 神奈川県横浜市瀬谷区二ツ橋町********** | S14033 | 20150712 | F-20100326-E |
CS008415000145 | 黒谷 麻緒 | 1 | 女性 | 1977-06-27 | 41 | 157-0067 | 東京都世田谷区喜多見********** | S13008 | 20150829 | F-20100622-F |
해설:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스를 쿼리하고 있습니다.
이 쿼리는 SELECT 문을 사용하여 'customer' 테이블에서 모든 컬럼을 선택하고 있다.
이 쿼리는 'status_cd' 컬럼이 정규식 패턴 '^[A-F]'와 일치하는 레코드만 선택함으로써 데이터를 필터링하고 있습니다(~ 연산자 사용).
정규식 패턴 '^[A-F]'는 "status_cd" 컬럼의 A에서 F로 시작하는 모든 값과 일치합니다. 패턴 내 ^ 문자는 문자열의 시작을 나타내며, [A-F]는 문자의 범위를 지정한다.
또한 이 쿼리는 LIMIT 절을 사용하여 반환되는 레코드 수를 10으로 제한하고 있다.
즉, 이 쿼리는 'status_cd' 컬럼이 A~F로 시작하는 'customer' 테이블에서 최대 10개의 레코드를 반환한다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령어를 통해 SQL 코드를 노트북 내에서 직접 실행할 수 있습니다.
S-014: 고객 데이터(df_customer)에서 상태코드(status_cd)의 끝자리가 숫자 1~9로 끝나는 데이터를 모두 추출하여 10건을 표시하라.
%%sql
SELECT * FROM customer WHERE status_cd ~ '[1-9]$' LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS001215000145 | 田崎 美紀 | 1 | 女性 | 1995-03-29 | 24 | 144-0055 | 東京都大田区仲六郷********** | S13001 | 20170605 | 6-20090929-2 |
CS033513000180 | 安斎 遥 | 1 | 女性 | 1962-07-11 | 56 | 241-0823 | 神奈川県横浜市旭区善部町********** | S14033 | 20150728 | 6-20080506-5 |
CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
CS040412000191 | 川井 郁恵 | 1 | 女性 | 1977-01-05 | 42 | 226-0021 | 神奈川県横浜市緑区北八朔町********** | S14040 | 20151101 | 1-20091025-4 |
CS009315000023 | 皆川 文世 | 1 | 女性 | 1980-04-15 | 38 | 154-0012 | 東京都世田谷区駒沢********** | S13009 | 20150319 | 5-20080322-1 |
CS015315000033 | 福士 璃奈子 | 1 | 女性 | 1983-03-17 | 36 | 135-0043 | 東京都江東区塩浜********** | S13015 | 20141024 | 4-20080219-3 |
CS023513000066 | 神戸 そら | 1 | 女性 | 1961-12-17 | 57 | 210-0005 | 神奈川県川崎市川崎区東田町********** | S14023 | 20150915 | 5-20100524-9 |
CS035513000134 | 市川 美帆 | 1 | 女性 | 1960-03-27 | 59 | 156-0053 | 東京都世田谷区桜********** | S13035 | 20150227 | 8-20100711-9 |
CS001515000263 | 高松 夏空 | 1 | 女性 | 1962-11-09 | 56 | 144-0051 | 東京都大田区西蒲田********** | S13001 | 20160812 | 1-20100804-1 |
CS040314000027 | 鶴田 きみまろ | 9 | 不明 | 1986-03-26 | 33 | 226-0027 | 神奈川県横浜市緑区長津田********** | S14040 | 20150122 | 2-20080426-4 |
해설:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스를 쿼리하고 있습니다.
이 쿼리는 SELECT 문을 사용하여 'customer' 테이블에서 모든 컬럼을 선택하고 있다.
이 쿼리는 "status_cd" 컬럼이 '[1-9]$' 정규표현식 패턴과 일치하는 레코드만 선택함으로써 데이터를 필터링하고 있습니다(~ 연산자를 사용하고 있습니다).
정규식 패턴 '[1-9]$'는 "status_cd" 컬럼의 1부터 9까지 숫자로 끝나는 모든 값과 일치합니다. 패턴의 $ 문자는 문자열의 끝을 나타내며, [1-9]는 문자 범위를 지정한다.
또한 이 쿼리는 LIMIT 절을 사용하여 반환되는 레코드 수를 10으로 제한하고 있다.
즉, 이 쿼리는 'status_cd' 컬럼의 끝자리가 1부터 9까지의 숫자인 'customer' 테이블에서 최대 10개의 레코드를 반환한다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령어를 사용하면 노트북 내에서 SQL 코드를 직접 실행할 수 있다.
S-015: 고객 데이터(df_customer)에서 상태코드(status_cd)의 시작이 알파벳 A~F로 시작하고 끝이 숫자 1~9로 끝나는 데이터를 모두 추출하여 10건을 표시하라.
%%sql
SELECT * FROM customer WHERE status_cd ~ '^[A-F].*[1-9]$' LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
CS022513000105 | 島村 貴美子 | 1 | 女性 | 1962-03-12 | 57 | 249-0002 | 神奈川県逗子市山の根********** | S14022 | 20150320 | A-20091115-7 |
CS001515000096 | 水野 陽子 | 9 | 不明 | 1960-11-29 | 58 | 144-0053 | 東京都大田区蒲田本町********** | S13001 | 20150614 | A-20100724-7 |
CS013615000053 | 西脇 季衣 | 1 | 女性 | 1953-10-18 | 65 | 261-0026 | 千葉県千葉市美浜区幕張西********** | S12013 | 20150128 | B-20100329-6 |
CS020412000161 | 小宮 薫 | 1 | 女性 | 1974-05-21 | 44 | 174-0042 | 東京都板橋区東坂下********** | S13020 | 20150822 | B-20081021-3 |
CS001215000097 | 竹中 あさみ | 1 | 女性 | 1990-07-25 | 28 | 146-0095 | 東京都大田区多摩川********** | S13001 | 20170315 | A-20100211-2 |
CS035212000007 | 内村 恵梨香 | 1 | 女性 | 1990-12-04 | 28 | 152-0023 | 東京都目黒区八雲********** | S13035 | 20151013 | B-20101018-6 |
CS002515000386 | 野田 コウ | 1 | 女性 | 1963-05-30 | 55 | 185-0013 | 東京都国分寺市西恋ケ窪********** | S13002 | 20160410 | C-20100127-8 |
CS001615000372 | 稲垣 寿々花 | 1 | 女性 | 1956-10-29 | 62 | 144-0035 | 東京都大田区南蒲田********** | S13001 | 20170403 | A-20100104-1 |
CS032512000121 | 松井 知世 | 1 | 女性 | 1962-09-04 | 56 | 210-0011 | 神奈川県川崎市川崎区富士見********** | S13032 | 20150727 | A-20100103-5 |
설명:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스를 쿼리하고 있습니다.
이 쿼리는 SELECT 문을 사용하여 'customer' 테이블에서 모든 컬럼을 선택하고 있다.
이 쿼리는 'status_cd' 컬럼이 정규식 패턴 '^[A-F]. *[1-9]$'와 일치하는 레코드만 선택함으로써 데이터를 필터링하고 있습니다(~ 연산자를 사용하고 있습니다).
정규식 패턴 '^[A-F]. *[1-9]$'는 'status_cd' 열에서 A~F로 시작하고 임의의 수의 문자가 이어지며 1~9의 숫자로 끝나는 모든 값과 일치합니다. 패턴 내 ^ 문자는 문자열의 시작을 나타내고, $ 문자는 문자열의 끝을 나타낸다.
또한 이 쿼리는 LIMIT 절을 사용하여 반환되는 레코드 수를 10으로 제한하고 있다.
즉, 이 쿼리는 'status_cd' 컬럼이 A~F 문자로 시작하고 1~9 숫자로 끝나는 'customer' 테이블에서 최대 10개의 레코드를 반환한다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령어를 통해 SQL 코드를 노트북 내에서 직접 실행할 수 있습니다.
S-016: 매장 데이터(df_store)에서 전화번호(tel_no)가 3자리-3자리-4자리인 데이터를 모두 표시하라.
%%sql
SELECT * FROM store WHERE tel_no ~ '^[0-9]{3}-[0-9]{3}-[0-9]{4}$';
* postgresql://padawan:***@db:5432/dsdojo_db 34 rows affected.
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
S12014 | 千草台店 | 12 | 千葉県 | 千葉県千葉市稲毛区千草台一丁目 | チバケンチバシイナゲクチグサダイイッチョウメ | 043-123-4003 | 140.118 | 35.63559 | 1698.0 |
S13002 | 国分寺店 | 13 | 東京都 | 東京都国分寺市本多二丁目 | トウキョウトコクブンジシホンダニチョウメ | 042-123-4008 | 139.4802 | 35.70566 | 1735.0 |
S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
S14036 | 相模原中央店 | 14 | 神奈川県 | 神奈川県相模原市中央二丁目 | カナガワケンサガミハラシチュウオウニチョウメ | 042-123-4045 | 139.3716 | 35.57327 | 1679.0 |
S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
S13052 | 森野店 | 13 | 東京都 | 東京都町田市森野三丁目 | トウキョウトマチダシモリノサンチョウメ | 042-123-4030 | 139.4383 | 35.55293 | 1087.0 |
S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
S14022 | 逗子店 | 14 | 神奈川県 | 神奈川県逗子市逗子一丁目 | カナガワケンズシシズシイッチョウメ | 046-123-4036 | 139.5789 | 35.29642 | 1838.0 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
S13016 | 小金井店 | 13 | 東京都 | 東京都小金井市本町一丁目 | トウキョウトコガネイシホンチョウイッチョウメ | 042-123-4015 | 139.5094 | 35.70018 | 1399.0 |
S14034 | 川崎野川店 | 14 | 神奈川県 | 神奈川県川崎市宮前区野川 | カナガワケンカワサキシミヤマエクノガワ | 044-123-4044 | 139.5998 | 35.57693 | 1318.0 |
S14048 | 中川中央店 | 14 | 神奈川県 | 神奈川県横浜市都筑区中川中央二丁目 | カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ | 045-123-4051 | 139.5758 | 35.54912 | 1657.0 |
S12007 | 佐倉店 | 12 | 千葉県 | 千葉県佐倉市上志津 | チバケンサクラシカミシヅ | 043-123-4001 | 140.1452 | 35.71872 | 1895.0 |
S14026 | 辻堂西海岸店 | 14 | 神奈川県 | 神奈川県藤沢市辻堂西海岸二丁目 | カナガワケンフジサワシツジドウニシカイガンニチョウメ | 046-123-4040 | 139.4466 | 35.32464 | 1732.0 |
S13041 | 八王子店 | 13 | 東京都 | 東京都八王子市大塚 | トウキョウトハチオウジシオオツカ | 042-123-4026 | 139.4235 | 35.63787 | 810.0 |
S14049 | 川崎大師店 | 14 | 神奈川県 | 神奈川県川崎市川崎区中瀬三丁目 | カナガワケンカワサキシカワサキクナカゼサンチョウメ | 044-123-4052 | 139.7327 | 35.53759 | 962.0 |
S14023 | 川崎店 | 14 | 神奈川県 | 神奈川県川崎市川崎区本町二丁目 | カナガワケンカワサキシカワサキクホンチョウニチョウメ | 044-123-4037 | 139.7028 | 35.53599 | 1804.0 |
S13018 | 清瀬店 | 13 | 東京都 | 東京都清瀬市松山一丁目 | トウキョウトキヨセシマツヤマイッチョウメ | 042-123-4017 | 139.5178 | 35.76885 | 1220.0 |
S14027 | 南藤沢店 | 14 | 神奈川県 | 神奈川県藤沢市南藤沢 | カナガワケンフジサワシミナミフジサワ | 046-123-4041 | 139.4896 | 35.33762 | 1521.0 |
S14021 | 伊勢原店 | 14 | 神奈川県 | 神奈川県伊勢原市伊勢原四丁目 | カナガワケンイセハラシイセハラヨンチョウメ | 046-123-4035 | 139.3129 | 35.40169 | 962.0 |
S14047 | 相模原店 | 14 | 神奈川県 | 神奈川県相模原市千代田六丁目 | カナガワケンサガミハラシチヨダロクチョウメ | 042-123-4050 | 139.3748 | 35.55959 | 1047.0 |
S12013 | 習志野店 | 12 | 千葉県 | 千葉県習志野市芝園一丁目 | チバケンナラシノシシバゾノイッチョウメ | 047-123-4002 | 140.022 | 35.66122 | 808.0 |
S14042 | 新山下店 | 14 | 神奈川県 | 神奈川県横浜市中区新山下二丁目 | カナガワケンヨコハマシナカクシンヤマシタニチョウメ | 045-123-4047 | 139.6593 | 35.43894 | 1044.0 |
S12030 | 八幡店 | 12 | 千葉県 | 千葉県市川市八幡三丁目 | チバケンイチカワシヤワタサンチョウメ | 047-123-4005 | 139.924 | 35.72318 | 1162.0 |
S14025 | 大和店 | 14 | 神奈川県 | 神奈川県大和市下和田 | カナガワケンヤマトシシモワダ | 046-123-4039 | 139.468 | 35.43414 | 1011.0 |
S14045 | 厚木店 | 14 | 神奈川県 | 神奈川県厚木市中町二丁目 | カナガワケンアツギシナカチョウニチョウメ | 046-123-4048 | 139.3651 | 35.44182 | 980.0 |
S12029 | 東野店 | 12 | 千葉県 | 千葉県浦安市東野一丁目 | チバケンウラヤスシヒガシノイッチョウメ | 047-123-4004 | 139.8968 | 35.65086 | 1101.0 |
S12053 | 高洲店 | 12 | 千葉県 | 千葉県浦安市高洲五丁目 | チバケンウラヤスシタカスゴチョウメ | 047-123-4006 | 139.9176 | 35.63755 | 1555.0 |
S14024 | 三田店 | 14 | 神奈川県 | 神奈川県川崎市多摩区三田四丁目 | カナガワケンカワサキシタマクミタヨンチョウメ | 044-123-4038 | 139.5424 | 35.6077 | 972.0 |
S14006 | 葛が谷店 | 14 | 神奈川県 | 神奈川県横浜市都筑区葛が谷 | カナガワケンヨコハマシツヅキククズガヤ | 045-123-4031 | 139.5633 | 35.53573 | 1886.0 |
설명:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스에 대한 쿼리를 수행하고 있다.
이 쿼리는 SELECT 문을 사용하여 'store' 테이블의 모든 컬럼을 선택하고 있다.
이 쿼리는 'tel_no' 컬럼이 '^[0-9]{3}-[0-9]{3}-[0-9]{3}-[0-9]{4}$' 정규 표현식 패턴과 일치하는 레코드만 선택하여 데이터를 필터링하고 있습니다(~ 연산자를 사용하고 있습니다).
정규식 패턴 '^[0-9]{3}-[0-9]{3}-[0-9]{3}-[0-9]{4}$'는 'tel_no' 열의 값 중 ##-####-##의 형식을 가진 유효한 전화번호를 따르는 값과 일치합니다(각 #은 한 자리 숫자를 나타냅니다). 패턴의 ^ 문자는 문자열의 시작을, $ 문자는 문자열의 끝을 나타내며 {3}과 {4}는 전화 번호의 각 섹션에 포함되는 정확한 숫자 수를 지정하는 수량화자입니다.
즉, 이 쿼리는 'store' 테이블에서 'tel_no' 컬럼이 유효한 전화 번호 형식과 일치하는 모든 레코드를 반환한다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행된다. 이 명령을 사용하면 노트북 내에서 SQL 코드를 직접 실행할 수 있습니다.
S-017: 고객 데이터(df_customer)를 생년월일(birth_day)을 기준으로 나이순으로 정렬하고, 맨 위부터 10개의 항목을 모두 표시하라.
%%sql
SELECT * FROM customer ORDER BY birth_day LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS003813000014 | 村山 菜々美 | 1 | 女性 | 1928-11-26 | 90 | 182-0007 | 東京都調布市菊野台********** | S13003 | 20160214 | 0-00000000-0 |
CS026813000004 | 吉村 朝陽 | 1 | 女性 | 1928-12-14 | 90 | 251-0043 | 神奈川県藤沢市辻堂元町********** | S14026 | 20150723 | 0-00000000-0 |
CS018811000003 | 熊沢 美里 | 1 | 女性 | 1929-01-07 | 90 | 204-0004 | 東京都清瀬市野塩********** | S13018 | 20150403 | 0-00000000-0 |
CS027803000004 | 内村 拓郎 | 0 | 男性 | 1929-01-12 | 90 | 251-0031 | 神奈川県藤沢市鵠沼藤が谷********** | S14027 | 20151227 | 0-00000000-0 |
CS013801000003 | 天野 拓郎 | 0 | 男性 | 1929-01-15 | 90 | 274-0824 | 千葉県船橋市前原東********** | S12013 | 20160120 | 0-00000000-0 |
CS001814000022 | 鶴田 里穂 | 1 | 女性 | 1929-01-28 | 90 | 144-0045 | 東京都大田区南六郷********** | S13001 | 20161012 | A-20090415-7 |
CS016815000002 | 山元 美紀 | 1 | 女性 | 1929-02-22 | 90 | 184-0005 | 東京都小金井市桜町********** | S13016 | 20150629 | C-20090923-C |
CS009815000003 | 中田 里穂 | 1 | 女性 | 1929-04-08 | 89 | 154-0014 | 東京都世田谷区新町********** | S13009 | 20150421 | D-20091021-E |
CS012813000013 | 宇野 南朋 | 1 | 女性 | 1929-04-09 | 89 | 231-0806 | 神奈川県横浜市中区本牧町********** | S14012 | 20150712 | 0-00000000-0 |
CS005813000015 | 金谷 恵梨香 | 1 | 女性 | 1929-04-09 | 89 | 165-0032 | 東京都中野区鷺宮********** | S13005 | 20150506 | 0-00000000-0 |
설명:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스에 대한 쿼리를 수행하고 있습니다.
SELECT 문을 사용하여 "customer" 테이블의 모든 컬럼을 선택하고 있습니다.
ORDER BY 절을 사용하여 "birth_day" 컬럼을 기준으로 오름차순으로 데이터를 정렬하고 있다.
LIMIT 절은 반환되는 레코드 수를 10으로 제한하는 데 사용됩니다.
즉, 이 쿼리는 'customer' 테이블에서 'birth_day' 컬럼을 기준으로 오름차순으로 데이터를 정렬하면 처음 10개의 레코드를 반환하게 됩니다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령어를 통해 SQL 코드를 노트북 내에서 직접 실행할 수 있다.
S-018: 고객 데이터(df_customer)를 생년월일(birth_day)을 기준으로 젊은 순서로 정렬하고, 맨 위부터 10개의 항목을 모두 표시하라.
%%sql
SELECT * FROM customer ORDER BY birth_day DESC LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS035114000004 | 大村 美里 | 1 | 女性 | 2007-11-25 | 11 | 156-0053 | 東京都世田谷区桜********** | S13035 | 20150619 | 6-20091205-6 |
CS022103000002 | 福山 はじめ | 9 | 不明 | 2007-10-02 | 11 | 249-0006 | 神奈川県逗子市逗子********** | S14022 | 20160909 | 0-00000000-0 |
CS002113000009 | 柴田 真悠子 | 1 | 女性 | 2007-09-17 | 11 | 184-0014 | 東京都小金井市貫井南町********** | S13002 | 20160304 | 0-00000000-0 |
CS004115000014 | 松井 京子 | 1 | 女性 | 2007-08-09 | 11 | 165-0031 | 東京都中野区上鷺宮********** | S13004 | 20161120 | 1-20081231-1 |
CS002114000010 | 山内 遥 | 1 | 女性 | 2007-06-03 | 11 | 184-0015 | 東京都小金井市貫井北町********** | S13002 | 20160920 | 6-20100510-1 |
CS025115000002 | 小柳 夏希 | 1 | 女性 | 2007-04-18 | 11 | 245-0018 | 神奈川県横浜市泉区上飯田町********** | S14025 | 20160116 | D-20100913-D |
CS002113000025 | 広末 まなみ | 1 | 女性 | 2007-03-30 | 12 | 184-0015 | 東京都小金井市貫井北町********** | S13002 | 20171030 | 0-00000000-0 |
CS033112000003 | 長野 美紀 | 1 | 女性 | 2007-03-22 | 12 | 245-0051 | 神奈川県横浜市戸塚区名瀬町********** | S14033 | 20150606 | 0-00000000-0 |
CS007115000006 | 福岡 瞬 | 1 | 女性 | 2007-03-10 | 12 | 285-0845 | 千葉県佐倉市西志津********** | S12007 | 20151118 | F-20101016-F |
CS014113000008 | 矢口 莉緒 | 1 | 女性 | 2007-03-05 | 12 | 260-0041 | 千葉県千葉市中央区東千葉********** | S12014 | 20150622 | 3-20091108-6 |
설명:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스를 쿼리하고 있다.
이 쿼리는 SELECT 문을 사용하여 "customer" 테이블의 모든 컬럼을 선택하고 있습니다.
ORDER BY 절을 사용하여 "birth_day" 컬럼을 기준으로 내림차순으로 데이터를 정렬하고 있다.
LIMIT 절은 반환되는 레코드 수를 10으로 제한하는 데 사용됩니다.
즉, 이 쿼리는 'customer' 테이블에서 'birth_day' 컬럼을 기준으로 내림차순으로 데이터를 정렬하면 처음 10개의 레코드를 반환하게 됩니다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행되고 있다. 이 명령어를 통해 SQL 코드를 노트북 내에서 직접 실행할 수 있습니다.
S-019: 영수증 내역 데이터(df_receipt)에 대해 건당 매출 금액(amount)이 높은 순서대로 순위를 부여하고, 맨 위부터 10건씩 표시한다. 항목은 고객 ID(customer_id), 매출 금액(amount), 부여한 랭크를 표시하도록 한다. 단, 매출액(amount)이 동일한 경우 동일한 순위를 부여한다.
%%sql
SELECT
customer_id,
amount,
RANK() OVER(ORDER BY amount DESC) AS ranking
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | amount | ranking |
---|---|---|
CS011415000006 | 10925 | 1 |
ZZ000000000000 | 6800 | 2 |
CS028605000002 | 5780 | 3 |
ZZ000000000000 | 5480 | 4 |
ZZ000000000000 | 5480 | 4 |
CS015515000034 | 5480 | 4 |
ZZ000000000000 | 5440 | 7 |
CS021515000089 | 5440 | 7 |
CS020414000081 | 5280 | 9 |
ZZ000000000000 | 5280 | 9 |
설명:
이 코드는 SQL 언어로 작성되었으며, 데이터베이스를 쿼리하고 있다.
쿼리는 "receipt" 테이블에서 "customer_id"와 "amount" 컬럼을 선택하고 있다.
또한 RANK()라는 창 함수를 사용하여 "amount" 컬럼을 기준으로 각 레코드의 순위를 계산하는데, RANK() 함수는 동일한 값에는 동일한 순위를 할당하고, 같지 않은 값에는 순위 사이에 간격을 두어 각 레코드의 순위를 계산한다. 창 함수는 OVER() 구문을 사용하여 정의되며, 순위를 적용할 순서와 파티션 또는 필터링 기준을 지정한다.
쿼리는 ORDER BY 절을 사용하여 "amount" 열을 기준으로 내림차순으로 데이터를 정렬한다.
이 쿼리는 AS 키워드를 사용하여 RANK() 함수의 결과를 '순위'라는 별칭으로 지정한다.
LIMIT 구문은 반환되는 레코드 수를 10으로 제한하기 위해 사용된다.
즉, 이 쿼리는 'receipt' 테이블에서 처음 10개의 레코드를 반환하고, 각 레코드에는 'customer_id', 'amount', 'ranking' 컬럼이 포함되며, 'ranking' 컬럼에는 'amount' 컬럼을 기준으로 한 각 레코드의 순위 가 기재되며, 가장 높은 금액을 가진 레코드의 순위는 1이다.
이 코드는 Jupyter 노트북 내에서 SQL 매직 명령 '%%sql'을 사용하여 실행된다. 이 명령을 통해 노트북 내에서 SQL 코드를 직접 실행할 수 있다.
S-020: 영수증 내역 데이터(df_receipt)에 대해 건당 매출 금액(amount)이 높은 순서대로 순위를 부여하고, 맨 위부터 10건씩 표시한다. 항목은 고객 ID(customer_id), 매출 금액(amount), 부여한 순위를 표시한다. 단, 매출금액(amount)이 동일한 경우에도 별도의 순위를 부여해야 한다.
%%sql
SELECT
customer_id,
amount,
ROW_NUMBER() OVER(ORDER BY amount DESC) AS ranking
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | amount | ranking |
---|---|---|
CS011415000006 | 10925 | 1 |
ZZ000000000000 | 6800 | 2 |
CS028605000002 | 5780 | 3 |
ZZ000000000000 | 5480 | 4 |
CS015515000034 | 5480 | 5 |
ZZ000000000000 | 5480 | 6 |
ZZ000000000000 | 5440 | 7 |
CS021515000089 | 5440 | 8 |
CS001412000160 | 5280 | 9 |
CS020515000102 | 5280 | 10 |
설명:
이 코드는 Jupyter 노트북에서 매직 명령 "%%sql"을 사용하여 실행되는 SQL 쿼리입니다.
이 쿼리는 "recipate" 테이블에서 3개의 컬럼을 선택합니다. "customer_id", "amount", 그리고 새로운 "ranking" 열. "customer_id"와 "amount" 열은 단순하며 이 두 필드의 값만 가져오고, "ranking" 열은 ROW_NUMBER()라는 window 함수를 사용하여 생성된 파생 컬럼이다.
ROW_NUMBER() 함수는 지정된 ORDER BY 구문을 기반으로 결과 집합의 각 행에 대해 고유한 연번을 생성한다. 이 함수는 'amount' 열의 값을 기준으로 각 행에 순위를 할당하는 데 사용되며, ORDER BY 구문은 'amount' 열을 기준으로 행을 내림차순으로 정렬하여 가장 높은 금액이 1순위, 두 번째로 높은 금액이 2순위, 이렇게 순서를 지정합니다.
AS 키워드는 새로운 컬럼에 "ranking"이라는 별칭을 부여하는 데 사용됩니다.
마지막으로 LIMIT 구문을 사용하여 쿼리가 반환하는 행 수를 10행으로 제한하고 있습니다.
따라서 이 쿼리의 결과는 "customer_id", "amount", "ranking" 컬럼을 가진 "receive" 테이블의 상위 10개의 행을 반환하며, "ranking" 컬럼에는 "amount" 컬럼의 순서에 따라 각 행에 할당된 연번이 포함되어 있고 가장 높은 금액의 것은 'ranking 1'이 됩니다.
Comment