https://programmers.co.kr/learn/courses/30/parts/17047
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
String, Date > 카테고리 별 상품 개수 구하기
SELECT SUBSTR(PRODUCT_CODE, 1,2) as CATEGORY, COUNT(*)
FROM PRODUCT
GROUP BY CATEGORY
SUBSTR은 0이아니라 1부터 시작한다
LEFT로도 가능
SELECT LEFT(PRODUCT_CODE, 2) as CATEGORY, COUNT(*)
FROM PRODUCT
GROUP BY CATEGORY
String, Date > 조건별로 분류하여 주문상태 출력하기
SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, "%Y-%m-%d"),
CASE WHEN OUT_DATE IS NULL THEN "출고미정"
WHEN OUT_DATE > DATE_FORMAT("2022-05-01", "%Y-%m-%d")
THEN "출고대기"
ELSE "출고완료"
END as "출고여부"
FROM FOOD_ORDER
ORDER BY ORDER_ID
String, Date > 루시와 엘라 찾기
01. IN 방법
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID
02. OR 방법
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME = "Lucy" OR NAME = "Ella" OR NAME = "Pickle" OR NAME = "Rogan" OR NAME = "Sabrina" OR NAME = "Mitty"
ORDER BY ANIMAL_ID
String, Date > 이름에 el이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE ANIMAL_TYPE="Dog" AND NAME LIKE '%el%'
ORDER BY NAME
String, Date > 중성화 여부 파악하기
MYSQL - 1) IF 방법
SELECT ANIMAL_ID,NAME,
IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%' , 'O', 'X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
구글 검색으로 풀었는데, 처음엔 IF문 안에
IF( SELECT SEX_UPON_INTAKE LIKE '%NEUTERED%' OR SEX_UPON_INTAKE LIKE '%SPAYED%' FROM ANIMAL_INS , 'O', 'X') AS '중성화'
이런식으로 검색할때는 SELECT와 FROM으로 묶어줘야한다고 생각해서 오류가 났었다.
MYSQL - 2) CASE 방법
SELECT ANIMAL_ID, NAME, CASE WHEN (SEX_UPON_INTAKE LIKE '%NEUTERED%' OR SEX_UPON_INTAKE LIKE '%SPAYED%') THEN 'O' ELSE 'X' END
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
ORACLE - CASE 방법
SELECT ANIMAL_ID,NAME,
CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%' THEN 'O'
WHEN SEX_UPON_INTAKE LIKE '%Spayed%'
THEN 'O' ELSE 'X' END
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
Oracle에서는 IF문으로 어떻게 해야하는지는 잘 모르겠다...
String, Date > 오랜 기간 보호한 동물(2)
1)MYSQL
SELECT A.ANIMAL_ID , A.NAME
FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME - A.DATETIME DESC
LIMIT 2
ANIMAL_OUTS테이블의 ANIMAL_ID는 ANIMAL_INS의ANIMAL_ID의 외래 키
라고 했으므로 ANIAML_INS (A) 테이블, ANIMAL_OUTS (B) 테이블을 두개 사용해서 A.ANIMAL_ID = B.ANIMAL_ID 일때
보호소에 있던 기간이 가장 긴 동물을 두마리 찾아야 한다.
보호소에 있던 기간 = B.DATETIME - A.DATETIME 으로 찾을 수 있다.
DESC (내림차순)으로 정렬하면, 가장 큰것부터 찾을 수 있으므로 LIMIT 2를 하면 가장 긴것 두개를 찾을 수 있다.
2)ORACLE
SELECT ANIMAL_ID, NAME
FROM (SELECT INS.ANIMAL_ID, INS.NAME FROM ANIMAL_INS INS, ANIMAL_OUTS OUTS
WHERE INS.ANIMAL_ID = OUTS.ANIMAL_ID
ORDER BY (OUTS.DATETIME - INS.DATETIME) DESC)
WHERE ROWNUM <= 2;
String, Date > DATETIME에서 DATE로 형변환
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
DATE_FORMAT(DATETIME, '%Y-%m-%d') 에서 %M, %D 처럼 대문자를 사용하면 숫자가 아닌 날짜형식 데이터 포맷으로 변환된다.
소문자 %y를 사용하면 2022에서 끝자리 두개 22 까지만 출력된다.
'언어 공부 > SQL' 카테고리의 다른 글
[SQL] 프로그래머스 GROUP BY (0) | 2022.12.31 |
---|---|
[SQL] 프로그래머스 SQL > JOIN (0) | 2022.04.05 |
[SQL] 프로그래머스 SQL > IS NULL (0) | 2022.04.05 |
[SQL] 프로그래머스 SQL > GROUP BY (0) | 2022.04.03 |
[SQL] 프로그래머스 SQL > SUM, MAX, MIN (0) | 2022.04.02 |