SQL深化...
日付、時刻
日付としてテキストを使用
PARSE DATE(日付形式、列名)
예시 : 20210912
→PARSE_DATE('%Y%m%d','20210912)
[날짜 PARSE_DATE표시법](https://www.notion.so/a241847fdee74c7aa71a2defbbfc8ce7)
日付から情報を抽出
EXTRACT(情報FROM列)
- YEAR
- MONTH
- DAY
-DAYOFWEEK-(1-7、日曜-土曜)
-WEEK(0-53、日曜日から)
-WEEK(MODAY)(0~53、月曜日からMODAYは別の日付に変更可能)
- QUARTER
計算日
プラス:DATE ADD(柱、INTERVAL持続時間)
マイナス:DATE SUB(列、INTERVAL期間)
```sql
DATE_ADD(컬럼, INTERVAL 5 day)
DATE_ADD(컬럼, INTERVAL 1 month)
DATE_ADD(컬럼, INTERVAL 2 week)
DATE_ADD(컬럼, INTERVAL 5 quater)
DATE_ADD(컬럼, INTERVAL 1 year)
```
日付差を求める
DATE DIFF(列1、列2、単位)
CASE WHEN
CASE WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
...
WHEN 조건N THEN 결과N ELSE 만약아무것도아니라면 END
CASE WHEN 조건1 THEN 0_결과1
WHEN 조건2 THEN 1_결과2
...
WHEN 조건N THEN N_결과N ELSE 만약아무것도아니라면 END
SUB QUERY
クエリー内のクエリー
SELECT MAX(order_date) AS max_order_date
FROM 오더데이터
---가장 최근 주문일자를 구함 sub query
SELECT *
FROM 오더데이터
WHERE order_date = (SELECT MAX(order_date) AS max_order_date FROM 오더데이터)
SELECT customer_id
FROM 오더데이터
--- 오더 데이터에서 고객id를 구함
SELECT *
FROM 고객데이터
WHERE customer_id IN (SELECT customer_id FROM 오더데이터)
地域別毎日販売
地域別1日平均販売量
SELECT U.지역, O.주문일, SUM(판매량) AS 일별판매량
FROM 오더데이터 O
LEFT JOIN 고객데이터 U
ON O.custmer_id = U.customer_id
GROUP BY U.지역,O.주문일
--- 지역 별 일별 판매량
SELECT state, AVG(일별판매량) AS 평균판매량
**FROM**(
****SELECT U.지역, O.주문일, SUM(판매량) AS 일별판매량
FROM 오더데이터 O
LEFT JOIN 고객데이터 U
ON O.custmer_id = U.customer_id
GROUP BY U.지역,O.주문일
**)**
GROUP BY 지역
WITH
名前をsubqueryと名付けてテンポラリ・テーブルとして作成すると便利です.
WITH 임시테이블이름 AS
(
서브쿼리
)
SELECT *
FROM 임시테이블 ......
WITH vs SUBQUERY
Subquery結果が1つの値または1つのカラムの場合→そのままSubqueryが長く複雑になる→WITH
同じSubqueryが1 Queryで複数回→WITHを繰り返す場合
→subqueryもqueryなので、多くの操作を繰り返すとパフォーマンスが低下する可能性が…
考えてみれば...
エラーメッセージ???
Reference
この問題について(SQL深化...), 我々は、より多くの情報をここで見つけました https://velog.io/@joonfly/SQL-심화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol