[PL / SQL] 기초 연습 14 (하)

3176 단어 Oacleplsql
14. 다음 과 같은 두 장의 표 가 있다. 거래 표 delit:
  Busi_date        Exch_time        Cust_piy_no         Exch_type        Prd_no       Del_amt        Org_no
20170101        93102                0312003                                 00001            1000            0312
20170101        103102                0312003                                 00002            500                0312
20170101        133102                0312003                                 00003            800                0312
......                                                                                        
20171231        143102                0320004                                 00004            500                0320

고객 정보 표 infot:
    Org_no       Org_name
0312                 
0320                 
...         
0306                 

수요 1:
       sql,   201712                      .
     :  、    、         、         

분석: 1. Where 문 구 를 사용 하여 먼저 날짜 가 201712 월 2 인지 판단 한 다음 에 필드 내용 을 관찰 한 결과 두 장의 표 와 관련 되 고 관련 이 필요 하 며 Inner Join 으로
SELECT d.busi_date AS   ,
       i.org_name AS     ,
       SUM(CASE WHEN d.exch_type='    ' THEN d.del_amt END) AS          ,
       SUM(CASE WHEN d.exch_type='    ' THEN d.del_amt END) AS          
  FROM deli_t d
  JOIN info_t i
    ON d.org_no=i.org_no
 WHERE SUBSTR(d.busi_date,1,6)='201712'  -- d.busi_date       
 GROUP BY d.busi_date,i.org_name;

필요 2:
   201712           、           .
     :  、       、       、      、      

분석:
  • Where 문구 로 날짜 가 201712 월 인지 먼저 판단 한다.
  • 첫 번 째 와 마지막 으로 집합 함수 Min 과 Max 로 시간 에 대한 값 을 구 할 수 있 습 니 다
  • 첫 번 째 주문 과 관련 된 정보, 두 번 째 주문 과 관련 된 것.
  • 두 장의 표 필드 와 관련 되 고 두 표 가 관련 되 며 Inner Join.
  • SELECT tmp.busi_date AS   ,
           d1.exch_time AS        ,
           d1.cust_piy_no AS        ,
           d2.exch_time AS       ,
           d2.cust_piy_no AS       
      FROM ( 
            SELECT d.busi_date,
                   MIN(exch_time) AS min_exch_time,
                   MAX(exch_time) AS max_exch_time
              FROM deli_t d
             WHERE SUBSTR(d.busi_date,1,6)='201712'  -- d.busi_date       
             GROUP BY d.busi_date
            ) tmp
       JOIN deli_t d1
         ON d1.busi_date=tmp.busi_date
        AND d1.exch_time=tmp.min_exch_time
       JOIN deli_t d2
         ON d2.busi_date=tmp.busi_date
        AND d2.exch_time=tmp.max_exch_time
      ORDER BY tmp.busi_date;
    

    수요 3:
       201712       10          :  、      、  
    

    분석: 1. Where 로 날 짜 를 판단 하 는 것 은 201712 월 2. 거래 량 10 위 권 이 고 먼저 거래 량 의 크기 에 따라 순 서 를 정 하고 분석 함수 로 한다.3. 하위 검색 을 사용 하여 10 보다 작은 모든 정 보 를 되 돌려 줍 니 다.
       WITH T AS (
        SELECT BUSI_DATE, PRD_NO, SUM(DEL_AMT) AS DEL_AMT
          FROM DELI_T D
         WHERE SUBSTR(D.BUSI_DATE, 1, 6) = '201712'
         GROUP BY BUSI_DATE, PRD_NO
         )
         SELECT * FROM (SELECT T.*,
                               ROW_NUMBER() OVER(PARTITION BY BUSI_DATE, PRD_NO ORDER BY DEL_AMT DESC) AS RN
                          FROM T) T1
          WHERE T1.RN <= 10;      

    좋은 웹페이지 즐겨찾기