본문 바로가기
자바 알고리즘/SQL

프로그래머스 SQL 고득점 KIT 풀면서 알게된 SQL 문법,메서드 정리

by hoshi03 2024. 6. 23.

• DATE_FORMAT 메서드

 

"2020-01-01" 형태로 날짜가 들어올때

date_format(published_date,'%Y-%m-%d')
//2020-07-01

 

• LIMIT , OFFSET

상위 N개를 가져와야 할때 쿼리문 마지막에 LIMIT N; 을 붙여준다

OFFSET을 사용하면 시작할 위치를 정할 수 있다

LIMIT 3, OFFSET 3 하면 4번째 줄 부터 4,5,6번째 줄의 데이터를 가져온다

SELECT 
    F.FLAVOR
FROM 
    FIRST_HALF F, JULY J
WHERE 
    F.FLAVOR = J.FLAVOR
GROUP BY 
    F.FLAVOR
ORDER BY (F.TOTAL_ORDER + SUM(J.TOTAL_ORDER)) DESC
LIMIT 3;

 

• ROUND(A,B) 함수

B자리에 뭐 없이 하면 1의 자리에서 반올림 ROUND(1234.1234) 하면 1234

B가 -1이면 10의 자리. -2면 100의 자리..

B가 1이면 소수점 첫재자리, B가 2면 소수점 둘째자리.. 

 

SELECT 
    A.CAR_ID, 
    A.CAR_TYPE, 
    ROUND(A.DAILY_FEE*30*(1-B.DISCOUNT_RATE*0.01)) AS FEE 
FROM 
    CAR_RENTAL_COMPANY_CAR A 
    JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN B
    ON A.CAR_TYPE=B.CAR_TYPE
WHERE A.CAR_ID NOT IN (
    SELECT DISTINCT C.CAR_ID 
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY C 
    WHERE C.START_DATE<='2022-11-30' AND C.END_DATE>='2022-11-01'
)
AND A.CAR_TYPE IN('SUV', '세단') 
AND B.DURATION_TYPE = '30일 이상' 
AND A.DAILY_FEE*30*(1-B.DISCOUNT_RATE*0.01)>=500000 
AND A.DAILY_FEE*30*(1-B.DISCOUNT_RATE*0.01)<2000000
ORDER BY FEE DESC, CAR_TYPE ASC, CAR_ID DESC;

 

빈 컬럼 널로 채우기

https://school.programmers.co.kr/learn/courses/30/lessons/131537

Null as USER_ID

 

• 실패한 문제

https://school.programmers.co.kr/learn/courses/30/lessons/273711

 

• WHERE 'KEYWORD' IN(COL1,COL2..)

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME FROM DEVELOPER_INFOS
WHERE 'Python' IN (SKILL_1,SKILL_2,SKILL_3)
ORDER BY ID;

SKILL_1..2..3 중에 Python이 있는 지 판별할 수 있다

 

비트연산자를 이용한 문제

https://school.programmers.co.kr/learn/courses/30/lessons/276034

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME FROM DEVELOPERS 
WHERE 
    SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') > 0  
    OR 
    SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python') > 0
ORDER BY ID;

 

D162번 개발자의 경우 SKILL_CODE가 8452 = 8192 + 256 +4 로 Vue, Python, Cpp 스킬을 보유하고 있습니다.
D164번 개발자의 경우 SKILL_CODE가 1024 로 C# 스킬을 보유하고 있습니다.
D165번 개발자의 경우 SKILL_CODE가 400 = 256 + 128 + 16 으로 Python, Java, JavaScript 스킬을 보유하고 있습니다.

 

등으로 조건이 들어왔는데 c#, 파이썬 등의 언어 코드가 2^n으로 들어왔다

둘이 & 연산해서 0보다 크면 일치하는 코드가 포함된 것