SELECT count(users)
case when age 20<=29 users
from USER_INFO
group by users;
▶ 정답쿼리 :SELECT COUNT(*) AS USERS FROM USER_INFO WHERE JOINED LIKE '2021%' AND AGE BETWEEN 20 AND 29;▶ 피드백 :
만약 내가 처음 쓴대로 case when 문을 사용하고자 했다면,() 넣었어야 함.
그리고 지금 또 파이썬 배운다고 이전에 배웠던 문법이 완전 뒤죽박죽인데
1) case when
then
else end 가 맞는 문법임
2) 20~29세 사이면 between 20 and 29
3) 문제 조건인 '21년도에 가입한' 부분을 계산하지 않음.
📌case when 을 이용할때 :
SELECT COUNT(CASE WHEN AGE BETWEEN 20 AND 29 THEN 1 END) AS USERS FROM USER_INFO WHERE JOINED LIKE '2021%';📌서브쿼리를 이용할때 :
SELECT COUNT(*) FROM ( SELECT * FROM USER_INFO WHERE JOINED LIKE '2021%' ) A WHERE AGE BETWEEN 20 AND 29;
SELECT
PRODUCT_ID,
PRODUCT_NAME,
PRODUCT_CD,
CATEGORY,
PRICE
from FOOD_PRODUCT
where max(PRICE)
▶ 정답쿼리 :SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE FROM FOOD_PRODUCT ORDER BY PRICE DESC LIMIT 1;SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE FROM FOOD_PRODUCT WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);▶ 피드백 :
📌 SELECT에서 불러오는 컬럼들은 반드시 FROM 절의 테이블 안에 있어야 한다.
1) SQL 문이 작동하는 순서에 대해 다시한번 숙지할 필요가 있음.
2) where 조건절에서는 집계함수(max)를 함께 쓸수 없음.
select NAME
from ANIMAL_INS
where DATETIME asc
limit 1
;
▶ 정답쿼리 :
select NAME from ANIMAL_INS order by DATETIME limit 1 ;▶피드백 :
1) where절로 했을때와 order by절로 쿼리를 작성했을때 결과물이 180도 다르게 나왔다.
2) order by 에서만 asc,desc 가능함
SELECT ANIMAL_ID, NAME
from ANIMAL_INS
where name like ('%el%')
order by name ;
▶ 정답쿼리 :
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%EL%' ORDER BY NAME;▶피드백 : 고양이도 있는데 '개' 만 이라는 조건을 놓침
SELECT sum(case when age is not null 0 then 1 end) as users
from USER_INFO
▶ 정답쿼리 :
SELECT SUM(CASE WHEN age IS NULL THEN 1 ELSE 0 END) AS users FROM USER_INFO;▶피드백 :
1) case when 조건 의 순서가 맞지않았음
'비어있으면' -> 1(true)
SELECT WAREHOUSE_ID,
WAREHOUSE_NAME,
ADDRESS
from FOOD_WAREHOUSE
where ADDRESS like '%경기도%'
order by WAREHOUSE_ID
▶ 정답쿼리 :
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, CASE WHEN FREEZER_YN IS NULL THEN 'N' ELSE FREEZER_YN END AS FREEZER_YN from FOOD_WAREHOUSE where ADDRESS like '%경기도%' order by WAREHOUSE_ID▶피드백 : null 값을 제대로 표현하지 못함. case when 구문은 생각했으나, else를 뭐라 적어야할지 떠오르지 않았음.
SELECT ANIMAL_ID,
NAME,
DATETIME AS 날짜
from ANIMAL_INS
order by ANIMAL_ID
▶ 정답쿼리 :
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS 날짜 from ANIMAL_INS order by ANIMAL_ID▶피드백 :
SELECT
DR_NAME,
DR_ID,
MCDP_CD,
HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'cs' or 'gs'
ORDER BY HIRE_YMD DESC, DR_NAME
▶ 정답쿼리 :
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD FROM DOCTOR WHERE MCDP_CD = 'cs' or MCDP_CD ='gs' ORDER BY HIRE_YMD DESC, DR_NAME ASC;▶피드백 :
1) where 절에서 or이나 in 둘다 쓸수 있음.
단, 나는 처음에 WHERE MCDP_CD = 'cs' or 'gs' 이렇게 썼기 때문에 오류남.
2) 예제 제대로 확인 안해서 date_format 안함.