본문 바로가기

IT Story/SQL Story

하루 동안 상승/하락 종목 분석하기

01. 상승/하락 종목 관련 다양한 정보 검색하기

stock 테이블에서 하루 시작가와 하루 종가를 비교해 상승한 금액, 비율과 하루 거래 중 최저 거래가와 최대 거래가의 차이를 구하는 쿼리이다.

SELECT

       date,

       symbol,

      CONVERT(DECIMAL(18,2), [open]) AS [open],

      CONVERT(DECIMAL(18,2), [close]) AS [close],

      CONVERT(DECIMAL(18,2), [open]-[close]) AS diff_price,

      CONVERT(DECIMAL(18,2), ([close]-[open])/[open] * 100) AS diff_ratio,

      '' AS ' ---',  --공란

      CONVERT(DECIMAL(18,2), [low]) AS [low],

      CONVERT(DECIMAL(18,2), [high]) AS [high],

      CONVERT(DECIMAL(18,2), [high]-[low])) AS diff_high_price,

      CONVERT(DECIMAL(18,2), ([high]-[close])/[low] * 100) AS diff_high_ratio

FROM stock

WHERE date = '2021-10-06'

결과

date                                      symbol  open     close     diff_price      diff_ratio  --- low         high       diff_high_price   diff_high_ratio
2021-10-06 00:00:00.000 HIPO     4.42      4.46      -0.04             0.90               4.31        4.49     0.18                      0.70
2021-10-06 00:00:00.000 GLBS    2.77     2.83      -0.06             2.17                2.75        2.85     0.10                      0.73
2021-10-06 00:00:00.000 JFU       1.69     1.66        0.03             -1.78              1.61        1.69     0.08                      1.86
2021-10-06 00:00:00.000 PINS      49.15   50.36     -1.21            2.46               49.01      50.92    1.91                     1.14

 

02. 가격이 10% 이상 오른 종목을 내림차순으로 정리하기

SELECT

       date,

       symbol,

      CONVERT(DECIMAL(18,2), [open]) AS [open],

      CONVERT(DECIMAL(18,2), [close]) AS [close],

      CONVERT(DECIMAL(18,2), [open]-[close]) AS diff_price,

      CONVERT(DECIMAL(18,2), ([close]-[open])/[open] * 100) AS diff_ratio,

      '' AS ' ---',  --공란

      CONVERT(DECIMAL(18,2), [low]) AS [low],

      CONVERT(DECIMAL(18,2), [high]) AS [high],

      CONVERT(DECIMAL(18,2), [high]-[low]) AS diff_high_price,

      CONVERT(DECIMAL(18,2), ([high]-[low])/[low] * 100) AS diff_high_ratio

FROM stock

WHERE date = '2021-10-06'

AND CONVERT(DECIMAL(18,2), ([close]-[open])/[open]*100)  >= 10

ORDER BY CONVERT(DECIMAL(18,2), ([close]-[open])/[open]*100)  DESC

결과

date                                       symbol     open     close        diff_price    diff_ratio  ---low      high      diff_high_price   diff_high_ratio
2021-10-06 00:00:00.000 GROM     3.27       4.98         -1.71           52.29            3.23     5.90         2.67                 82.66
2021-10-06 00:00:00.000 FAMI        0.31      0.39         -0.08           25.81             0.30     0.42         0.12                 40.00
2021-10-06 00:00:00.000 NXTP      1.36      1.68        -0.32            23.53             1.31      1.77        0.46                  35.11
2021-10-06 00:00:00.000 AFRM     109.78  133.70   -23.92          21.79             109.20  138.88    29.68               27.18
2021-10-06 00:00:00.000 SDC        5.70      6.75       -1.05             18.42            5.63        6.76        1.13                 20.07

 symbol이 GROM인 주식이 82.66%로 가장 높은 상승률을 기록했으며, 상승률 기준으로 내림차순 정렬되어 마지막 결과는 10%에 가장 근접해 상승한 ENSC  종목으로 나타났다.

 

03. 가격이 오른 종목의 상세 정보 검색하기

nasdaq_company 테이블을 조인해 기업 이름(company_name)과 산업군(sector), 산업 종류(industry)를 함께 검색하는 쿼리다.

SELECT

       date,

       b.symbol,

       b.company_name,

       b.sector,      

      b.industry,      

      CONVERT(DECIMAL(18,2), a.[open]) AS [open],

      CONVERT(DECIMAL(18,2), a.[close]) AS [close],

      CONVERT(DECIMAL(18,2), a.[open]-a.[close]) AS diff_price,

      CONVERT(DECIMAL(18,2), (a.[close]-a.[open])/a.[open] * 100) AS diff_ratio,

      '' AS ' ---',  --공란

      CONVERT(DECIMAL(18,2), a.[low]) AS [low],

      CONVERT(DECIMAL(18,2), a.[high]) AS [high],

      CONVERT(DECIMAL(18,2), a.[high]-a.[low]) AS diff_high_price,

      CONVERT(DECIMAL(18,2), (a.[high]-a.[low])/a.[low] * 100) AS diff_high_ratio

FROM stock AS a

      INNER JOIN nasdaq_company AS b ON a.symbol = b.symbol

WHERE date = '2021-10-06'

AND CONVERT(DECIMAL(18,2), (a.[close]-a.[open])/a.[open]*100)  >= 10

ORDER BY CONVERT(DECIMAL(18,2), (a.[close]-a.[open])/a.[open]*100)  DESC

결과

date               symbol company_name                                                     sector industry  ...                               diff_high_ratio
2021-10-06  GROM Grom Social Enterprises Inc. Common Stock                                                                             82.66
2021-10-06  FAMI    Farmmi Inc. Ordinary Shares Consumer              Non-Durables Packaged Foods                 40.00
2021-10-06  NXTP  NextPlay Technologies Inc. Common Stock         Technology EDP Services                            35.11
2021-10-06  AFRM  Affirm Holdings Inc. Class A Common Stock       Technology EDP Services                            27.18
2021-10-06  SDC  SmileDirectClub Inc. Class A Common Stock        Health Care Medical/Dental Instruments    20.07

stock 테이블을 a로, nasdaq_company 테이블을 b로 별칭을 붙였다. symbol 열이 어디에 속하는 지 구분하기 위해서다. 

'IT Story > SQL Story' 카테고리의 다른 글