
-- 주문한 상품별 판매량, 판매금액 출력
-- 조건1. 판매량이 높은 순으로 정렬
-- 상품번호, 상품명, 총판매량, 총판매금액
SELECT
g.GOOD_SEQ as 상품번호,
g.GOOD_NAME as 상품명,
SUM(og.ORDER_AMOUNT) as 총판매량,
SUM(og.ORDER_PRICE) as 총판매금액
FROM
GOODS g
JOIN
ORDERS_GOODS og
ON
g.GOOD_SEQ = og.GOOD_SEQ
GROUP BY
g.GOOD_SEQ, g.GOOD_NAME
ORDER BY
총판매량 DESC;
**SUM**을 사용했다.**GROUP BY**로 묶어줘야 한다.**GROUP BY** 문에 그룹 기준 컬럼 두 개인 **GOOD_SEQ**와 **GOOD_NAME**을 사용했다.-- 회원아이디 총구매횟수 총구매금액
-- 조건1 : 구매금액이 높은 순으로 출력
SELECT
u.USER_ID as 회원아이디,
COUNT(*) as 총구매횟수,
SUM(o.TOT_PRICE) as 총구매금액
FROM
USERS u
JOIN
ORDERS o
ON
u.USER_SEQ = o.USER_SEQ
GROUP BY
u.USER_ID
ORDER BY
총구매금액 DESC;
COUNT(*)를 통해 조인된 테이블의 튜플 수를 세면, 모든 유저의 총 주문 수가 된다.USER_ID로 GROUP BY 처리해주면, 유저별 총 구매횟수를 나타낼 수 있다.SUM(TOT_PRICE)를 통해, 유저별로 총 구매 금액을 나타낼 수 있다.GROUP BY에 Alias인 ‘회원아이디’를 사용하면 안된다 )구매실적이 전혀 없는 회원 목록 출력
회원아이디 회원명
SELECT
uu.USER_ID as 회원아이디,
uu.USER_NAME as 회원명
FROM
USERS uu
WHERE
USER_SEQ NOT IN (
SELECT
u.USER_SEQ
FROM
USERS u
JOIN
ORDERS o
ON
u.USER_SEQ = o.USER_SEQ);
**NOT IN** 연산을 통해 해당 유저 아이디들을 모아줬다.**MINUS** 집합 연산자를 통해 해결할 수도 있다.SELECT
USER_ID as 회원아이디,
USER_NAME as 회원명
FROM
USERS
WHERE
USER_SEQ IN (
(SELECT
USER_SEQ
FROM
USERS)
MINUS
(SELECT
DISTINCT USER_SEQ
FROM
ORDERS));
USER_SEQ가 있을 수 있기에, DISTINCT를 사용해주었다.조건1. 관리자 제외
조건2. 휴면회원은 구매 실적이 전혀 없는 회원
SELECT
(SELECT
COUNT(*)
FROM
USERS u
WHERE
u.USER_SEQ NOT IN (
SELECT
uu.USER_SEQ
FROM
USERS uu
JOIN
ORDERS o
ON
uu.USER_SEQ = o.USER_SEQ)
AND
u.USER_GUBUN != 'a')
|| '/' ||
(SELECT
COUNT(*)
FROM
USERS u
WHERE
u.USER_GUBUN != 'a') as 회원수
,(SELECT
COUNT(*)
FROM
USERS u
WHERE
u.USER_SEQ NOT IN (
SELECT
uu.USER_SEQ
FROM
USERS uu
JOIN
ORDERS o
ON
uu.USER_SEQ = o.USER_SEQ)
AND
u.USER_GUBUN != 'a')/
(SELECT
COUNT(*)
FROM
USERS u
WHERE
u.USER_GUBUN != 'a') * 100 || '%' as 휴면회원
FROM
DUAL;
SELECT 절에 분자와 분모를 구하는 스칼라 서브쿼리를 사용하여 해결했다.**||** 연산자를 통해서 수행하는 것을 놓쳤다.DUAL 을 통해 한 줄만 간단히 출력하도록 했다.[결과]
회원수 | 휴면회원
1/4 | 25%
조건 1. 관리자 제외
조건 2. 매니저 번호 오름차순, 회원번호 오름차순 정렬
SELECT
m.USER_NAME as 매니저,
u.USER_NAME as 회원
FROM
USERS u
JOIN
USERS m
ON
u.MGR_SEQ = m.USER_SEQ
WHERE
u.USER_GUBUN != 'a'
ORDER BY
m.USER_SEQ ASC, u.USER_SEQ ASC;
Self Join을 활용하는 문제였다.u.USER_GUBUN 이 ‘a’가 아닌 조건을 추가해줬다.SELECT
m.USER_NAME as 매니저,
u.USER_NAME as 회원
FROM
(SELECT
u.USER_SEQ,
u.MGR_SEQ,
u.USER_NAME
FROM
USERS u
WHERE
u.USER_GUBUN != 'a') u
JOIN
USERS m
ON
u.MGR_SEQ = m.USER_SEQ
ORDER BY
m.USER_SEQ ASC, u.USER_SEQ ASC;
총주문수량 총주문금액 총회원수 총업체수 총상품수
AMT PRICE UCNT CCNT GCNT
SELECT
(SELECT
SUM(ORDER_AMOUNT)
FROM
ORDERS_GOODS) as AMT,
(SELECT
SUM(TOT_PRICE)
FROM
ORDERS) as PRICE,
(SELECT
COUNT(*)
FROM
USERS) as UCNT,
(SELECT
COUNT(*)
FROM
COMPANY) as CCNT,
(SELECT
COUNT(*)
FROM
GOODS) as GCNT
FROM
DUAL;
**SELECT** 절의 서브쿼리를 이용해서 대시보드를 만들었다.**DUAL** 테이블을 활용해 한 줄로 출력했다.1월 2월 3월 4월… 12월 ( 2018년 기준 )
…
SELECT
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/01/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/02/01', 'YYYY-MM-DD')) as "1월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/02/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/03/01', 'YYYY-MM-DD')) as "2월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/03/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/04/01', 'YYYY-MM-DD')) as "3월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/04/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/05/01', 'YYYY-MM-DD')) as "4월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/05/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/06/01', 'YYYY-MM-DD')) as "5월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/06/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/07/01', 'YYYY-MM-DD')) as "6월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/07/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/08/01', 'YYYY-MM-DD')) as "7월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/08/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/09/01', 'YYYY-MM-DD')) as "8월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/09/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/09/01', 'YYYY-MM-DD')) as "9월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/10/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/11/01', 'YYYY-MM-DD')) as "10월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/11/01', 'YYYY-MM-DD')
AND
TO_DATE('2018/12/01', 'YYYY-MM-DD')) as "11월",
(SELECT
NVL(SUM(TOT_PRICE),0)
FROM
ORDERS
WHERE
ORDER_DATE BETWEEN
TO_DATE('2018/12/01', 'YYYY-MM-DD')
AND
TO_DATE('2019/01/01', 'YYYY-MM-DD')) as "12월"
FROM
DUAL;
**BETWEEN** ~ **AND** ~ 연산자를 통해 날짜의 범위를 처리해주었다.SELECT
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'01', TOT_PRICE, 0)) as M01,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'02', TOT_PRICE, 0)) as M02,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'03', TOT_PRICE, 0)) as M03,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'04', TOT_PRICE, 0)) as M04,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'05', TOT_PRICE, 0)) as M05,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'06', TOT_PRICE, 0)) as M06,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'07', TOT_PRICE, 0)) as M07,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'08', TOT_PRICE, 0)) as M08,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'09', TOT_PRICE, 0)) as M09,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'10', TOT_PRICE, 0)) as M10,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'11', TOT_PRICE, 0)) as M11,
SUM(DECODE(TO_CHAR(ORDER_DATE, 'MM'),'12', TOT_PRICE, 0)) as M12
FROM
ORDERS o
세로로 보여주는 것입니다.가로로 보여주려면, GROUP BY를 사용해주면 됩니다.drop table kospi;
CREATE TABLE "KOSPI"
( "RDATE" DATE,
"OPRICE" NUMBER(12,0),
"HPRICE" NUMBER(12,0),
"LPRICE" NUMBER(12,0),
"CPRICE" NUMBER(12,0),
"VOL" NUMBER(15,0),
"TICKER" CHAR(6 BYTE),
"TNAME" VARCHAR2(36 BYTE)
) ;
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),114034,114617,56531,63331,16588524,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),66148,84506,61679,84020,14876714,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),83534,93928,80912,89459,9429015,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),88877,102281,77026,83534,10879277,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),81786,90722,76444,80135,6534788,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),79358,80426,62068,69547,7182731,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-07-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),69547,93733,63525,86740,15576902,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-08-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),86740,119474,85768,111606,21719083,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-09-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),110440,145214,104806,112383,20454470,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-10-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),114520,150556,109469,137929,15283802,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),138706,140066,115880,135986,14005836,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-12-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),137832,139386,102700,103000,11364458,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),106000,129900,105600,122800,7527301,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),123500,295000,123500,285500,35908899,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),286500,531000,272000,498500,42943406,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),508000,820000,472500,730000,37830674,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),750000,778000,499000,563000,20158207,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),568000,799000,555000,754000,19415964,'086520','에코프로');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),277000,316000,256000,265000,8345521,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),274500,292000,261000,285000,5751092,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),284500,306500,275500,293000,6379149,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),289500,300000,276000,289000,5225366,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),285000,298000,272000,289000,4952487,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),291500,295000,229500,230500,6362003,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-07-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),234500,243000,221000,242000,5123378,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-08-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),245000,266500,232500,255000,6692472,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-09-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),252500,259500,211000,211000,7406481,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-10-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),215500,258000,215000,249000,7554258,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),250000,303000,247000,299500,10986070,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-12-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),304500,306500,276000,276500,8156754,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),277000,315000,265500,300500,7767937,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),302000,349500,293500,318000,14070434,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),325500,392000,314500,368000,19258342,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),385000,436000,358000,377000,43960760,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),379000,387500,356000,360000,14345086,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),361000,410500,357000,388000,16961001,'005490','POSCO홀딩스');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),79400,79800,71200,73300,280187100,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),74900,75800,71000,72100,233201135,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),72300,73100,68700,69600,307432780,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),69500,69600,64500,67400,309880731,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),66600,68800,64900,67400,310129252,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),66600,67300,56800,57000,428473209,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-07-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),56900,62600,55700,61400,301826933,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-08-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),61000,61900,58200,59700,251681339,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-09-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),58700,58900,51800,53100,288615372,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-10-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),55300,60100,54000,59400,326537635,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),59900,63200,58100,62200,290682036,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-12-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),63100,63200,55300,55300,234543029,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),55500,65000,54500,61000,304721328,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),62600,64000,60200,60600,259275907,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),60900,64000,59000,64000,273644150,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),64000,66600,62300,65500,291035766,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),66000,72500,63600,71400,269419265,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),70900,73400,70000,72200,265070208,'005930','삼성전자');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),242000,278500,199500,216000,15570280,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),223000,232000,192500,200500,8821992,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),203500,221500,188500,215000,8237602,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),213500,225000,199500,205000,7583379,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),202000,216500,196000,215500,5641431,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),215500,246000,192000,192000,10649198,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-07-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),191500,193500,158500,187500,8548378,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-08-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),188500,213500,179500,190000,8181922,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-09-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),187000,194000,142500,143500,8026950,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-10-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),148000,176000,147500,173000,8111615,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),174500,193000,166000,179000,11765884,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-12-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),182500,182500,153000,154000,5174674,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),155500,170500,144000,162100,6437750,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),162300,176000,150000,150100,13097500,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),151200,194900,150500,179300,24422877,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),181500,209000,171200,173100,19568480,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),174500,193400,173500,189100,11424918,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),189400,207500,157800,158500,14634689,'096770','SK이노베이션');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),191210,192655,141602,145455,20295654,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),147863,159422,144492,153643,8603480,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),153643,182541,153161,165202,16427064,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),163757,171463,149790,169537,7548085,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),168092,169537,133895,154606,9935962,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),154124,177243,140638,171945,10070030,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-07-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),173871,185912,167610,183023,8401475,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-08-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),183504,207105,175316,182541,9452159,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-09-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),181096,182541,157014,169055,7961120,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-10-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),171945,186876,156051,184949,7114871,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),183504,186876,165202,169537,7533555,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-12-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),172908,177243,159500,160500,6763403,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),161000,172000,156000,161600,5410380,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),161700,172000,144700,145200,9298283,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),144900,160500,142500,149800,13115035,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),151400,184100,149400,160600,12581317,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),160700,180900,153800,171300,8818837,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),171300,177400,149300,152900,10296850,'068270','셀트리온');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),113500,117000,82200,85000,67362020,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),87100,95000,84500,94100,49646154,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),94400,110000,89600,106500,48471677,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),105500,108000,87600,89900,31610295,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),88400,91900,80000,85000,35611165,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),84000,87400,66700,69900,38118975,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-07-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),70000,75600,66200,74800,30423526,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-08-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),74800,84300,71500,73400,37365973,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-09-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),72300,72500,55000,57100,29609838,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-10-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),57700,58100,46500,50700,64147607,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),50400,61000,48950,56400,71561732,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2022-12-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),59200,59700,52700,53100,33393351,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-01-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),53600,65500,51400,61400,43113522,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-02-28 00:00:00','YYYY-MM-DD HH24:MI:SS'),62000,71300,61000,62400,51391880,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-03-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),62200,63800,57500,61100,44325794,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-04-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),61400,61600,55300,58100,33895780,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-05-31 00:00:00','YYYY-MM-DD HH24:MI:SS'),58200,58900,55600,56200,26107371,'035720','카카오');
Insert into KOSPI (RDATE,OPRICE,HPRICE,LPRICE,CPRICE,VOL,TICKER,TNAME) values (to_date('2023-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS'),56300,58000,48400,49100,33124161,'035720','카카오');
SELECT
코드 as TICKER,
종목명 as TNAME
FROM
KOSPI
GROUP BY
코드, 종목명;
DISTINCT를 쓰거나, GROUP BY를 쓰거나!SELECT
DISTINCT 코드 as TICKER, 종목명 as TNAME
FROM
KOSPI;
[ 결과 ]
TICKER TNAME
096770 SK이노베이션
005490 POSCO홀딩스
068270 셀트리온
035720 카카오
005930 삼성전자
086520 에코프로
소수점 나오면 버리기
SELECT
FLOOR(((MAX(날짜) - MIN(날짜))/30)) as MM
FROM
KOSPI;
[ 결과 ]
MM
17
TICKER TNAME MAXPRICE MINPRICE
SELECT
코드 as TICKER,
종목명 as TNAME,
MAX(종가) as MAXPRICE,
MIN(종가) as MINPRICE
FROM
KOSPI
GROUP BY
코드, 종목명;
[ 결과 ]
TICKER TNAME MAXPRICE MINPRICE
096770 SK이노베이션 216000 143500
005490 POSCO홀딩스 388000 211000
068270 셀트리온 184949 145200
035720 카카오 106500 49100
005930 삼성전자 73300 53100
086520 에코프로 754000 63331
-- 각 종목별 최근 종가
SELECT
코드 as TICKER,
종목명 as TNAME,
종가
FROM
KOSPI
WHERE
(종목명, 날짜) IN (
SELECT
종목명,
MAX(날짜)
FROM
KOSPI
GROUP BY
종목명
);
각 종목별 상승, 하락 횟수
상승 : 시가 < 종가
하락 : 시가 > 종가
TNAME GUBUN CNT
POSCO홀딩스 상승 11
SELECT
k.TNAME,
k.GUBUN,
COUNT(*) as CNT
FROM
(SELECT
종목명 as TNAME,
CASE
WHEN
시가 < 종가
THEN
'상승'
WHEN
시가 > 종가
THEN
'하락'
END as GUBUN
FROM
KOSPI) k
GROUP BY
TNAME, GUBUN
ORDER BY
TNAME ASC;
GROUP BY가 SELECT 보다 먼저 실행되기에, SELECT의 Alias를 참조할 수 없기 때문이다. )UNION으로 구현할 수도 있다. ‘상승’과 ‘하락’을 나누어서 UNION을 통해 합쳐주면 된다.(SELECT
종목명 as TNAME,
'상승' as GUBUN,
COUNT(*) as CNT
FROM
KOSPI
WHERE
시가 < 종가
GROUP BY
종목명)
UNION
(SELECT
종목명 as TNAME,
'하락' as GUBUN,
COUNT(*) as CNT
FROM
KOSPI
WHERE
시가 > 종가
GROUP BY
종목명)
ORDER BY
TNAME;
SELECT
월,
SUM(거래량) as 거래량
FROM
(SELECT
TO_CHAR(날짜, 'MM') as 월,
거래량
FROM(
SELECT
날짜,
거래량
FROM
KOSPI
WHERE
날짜 BETWEEN
TO_DATE('2022/01/01')
AND
TO_DATE('2023/01/01')
AND
종목명 = '카카오'))
GROUP BY
월
ORDER BY
월 ASC;
SELECT
*
FROM(
SELECT
월,
SUM(거래량) as 거래량
FROM(
SELECT
TO_CHAR(날짜, 'MM') as 월,
거래량
FROM
KOSPI
WHERE
날짜 BETWEEN
TO_DATE('2022/01/01')
AND
TO_DATE('2023/01/01')
AND
종목명 = '카카오')
GROUP BY
월
ORDER BY
거래량 DESC)
WHERE
ROWNUM = 1;
— 등락율 = (매도가격 - 매수가격) / 매수가격 * 100
— 등락율 = (종가 - 시가) / 시가 * 100