상품을 구매한 회원비율 구하는 머시꺵이 문제는 제일 마지막에 잇읍니당
앞의 두 포스팅은 MYSQL이엇다면,
지금부턴 오라클로 풀려구 한당
금융권이다보니께 MYSQL보다 ORACLE을 더 많이 쓰는 거 같아서리 ㅎㅎ
근데 또 발령 난 동기 말 들어보면 거기선 또 MYSQL 쓴다구 그래서 걍 둘 다 겸사겸사 공부해두는 걸루다가...
SELECT TO_CHAR(SALES_DATE,'YYYY-MM-DD') AS SALES_DATE
, PRODUCT_ID
, USER_ID
, SALES_AMOUNT
FROM
(SELECT A.SALES_DATE
, A.PRODUCT_ID
, A.USER_ID
, A.SALES_AMOUNT
FROM ONLINE_SALE A
UNION ALL
SELECT B.SALES_DATE
, B.PRODUCT_ID
, NULL AS USER_ID
, B.SALES_AMOUNT
FROM OFFLINE_SALE B) C
WHERE TO_CHAR(SALES_DATE,'YYYY-MM-DD') LIKE '2022-03%'
ORDER BY SALES_DATE ASC,
PRODUCT_ID ASC,
USER_ID ASC
저 인라인 뷰를 with문으로 묶어버려두 좋을 거 같지만 그냥 귀찮아서 냅둿다
SELECT PT_NAME
, PT_NO
, GEND_CD
, AGE
, CASE
WHEN TLNO IS NULL THEN 'NONE'
WHEN TLNO IS NOT NULL THEN TLNO
END AS TLNO
FROM PATIENT
WHERE GEND_CD = 'W' AND AGE <= 12
ORDER BY AGE DESC, PT_NAME ASC
그냥 몸풀기겸...
DECODE보단 CASE문을 쓰자~~~
차장님두 현장에선 CASE에 비해 DECODE 쓰는 일이 많이 없다구 하셧당
솔직히 SM 입장에선 DECODE보단 CASE문이 보기 편한 것두 사실이긴 하니께...
WITH JOIN_2021 AS (
SELECT COUNT(DISTINCT F.USER_ID) AS JOIN
FROM USER_INFO F
WHERE TO_CHAR(JOINED,'YYYY-MM-DD') LIKE '2021-%'
),
PURCHASE_2021 AS (
SELECT EXTRACT(YEAR FROM SALES_DATE) AS YEAR
, EXTRACT(MONTH FROM SALES_DATE) AS MONTH
, COUNT(DISTINCT N.USER_ID) AS PURCHASED_USERS
FROM JOIN_2021
, ONLINE_SALE N INNER JOIN USER_INFO F
ON N.USER_ID = F.USER_ID
AND TO_CHAR(JOINED,'YYYY-MM-DD') LIKE '2021-%'
GROUP BY EXTRACT(YEAR FROM SALES_DATE), EXTRACT(MONTH FROM SALES_DATE)
ORDER BY YEAR ASC, MONTH ASC
)
SELECT YEAR
, MONTH
, PURCHASED_USERS
, ROUND(PURCHASED_USERS / JOIN, 1) AS PURCHASED_RATIO
FROM PURCHASE_2021, JOIN_2021
다른 분들은 어케 풀었는지 모르지만
나는 인라인뷰 대신 WITH 절이랑 EXTRACT 써서 풀었다
JOIN_2021은 2021년에 가입한 사람들(분모로 쓰려고 따로 뽑음)이구
PURCHASE_2021은 2021년에 가입한 사람들 중 구매한 건을 뽑아서 고걸 이제 연, 월로 각각 정렬한 쿼리문이다. 요건 또 분자로 사용했다 ㅎ
좀 가독성 높이려고 WITH문 썼는디 더 나빠 보이는 거 같기두 하고,,,,?
아 글구 쿼리 성능 상 좌변 가공은 절대 하면 안 되어서 LIKE로 바꿔썻다
옛날에 짠 쿼리 중에 성능이고 나발이고 그렇게 짠 거 있는디
지금 와서 보면 돌았냐는 생각 밖에 안 든다ㅎ
고럼 오늘 일기 끗