SQL深化...


日付、時刻

  • DATE:年-月-日
  • TIME:時間:分:秒
  • DATETTIME:年-月-日:分:秒
  • TIMESTAMP年-月-日時間:分:秒UTC
  • UTC:タイムゾーン

    日付としてテキストを使用

  • 「YYY-MM-DD」形式なら
  • DATE(列)
  • 以外の形式なら

  • 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、単位)
  • 列1は最も近い(列1-列2)
  • でなければならない.
  • 単位(YEAR、MONTH、DAY...)
  • CASE WHEN

  • エクセルのIFに似ています...
  • 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 SUBQUERYSubquery結果が1つの値または1つのカラムの場合→そのまま
    Subqueryが長く複雑になる→WITH
    同じSubqueryが1 Queryで複数回→WITHを繰り返す場合
    →subqueryもqueryなので、多くの操作を繰り返すとパフォーマンスが低下する可能性が…
  • 考えてみれば...


    エラーメッセージ???
  • コンピュータは間違いなく、
  • を使います
  • 質問Google
  • 公式ファイルの見方、スタックオーバーフローの見方を教えてください...本当に初心者に授業をしますね.