[SQL] 프로그래머스 lv1~lv2 부분 문제풀이

Jubami·2022년 12월 4일
0

코테연습

목록 보기
16/19

나이 정보가 없는 회원 수 구하기

SELECT COUNT(1) AS USERS
FROM USER_INFO 
WHERE AGE IS NULL;

경기도에 위치한 식품창고 목록 출력하기

  • 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.
    -> ifnull(컬럼,값) // null 일 경우 출력시킬 값을 대체
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, TLNO,
        ifnull(FREEZER_YN,'N') as FREEZER_YN
FROM FOOD_WAREHOUSE 
WHERE ADDRESS LIKE '%경기도%';

가격이 제일 비싼 식품의 정보 출력하기

  • WHERE 서브쿼리를 사용해서 풀기
SELECT *
FROM FOOD_PRODUCT 
WHERE PRICE = (SELECT MAX(PRICE)
              FROM FOOD_PRODUCT)

카테고리 별 상품 개수 구하기

  • 문자열 관련 함수
    - substring(문자열,시작위치,길이)
    - left, right(문자열,길이)
    -> A1000011 에서 A1만 뽑으면 되므로 LEFT 함수 사용
SELECT LEFT(product_code,2) AS CATEGORY , COUNT(1) AS PRODUCTS
FROM PRODUCT 
GROUP BY 1
ORDER BY 1 ASC 

3월에 태어난 여성 회원 목록 출력하기

SELECT MEMBER_ID,
        MEMBER_NAME,GENDER, 
        DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE 
WHERE MONTH(DATE_OF_BIRTH) = 3 AND 
        TLNO IS NOT NULL AND
        GENDER = 'W'
ORDER BY 1

상품 별 오프라인 매출 구하기

SELECT P.product_code, sum(P.price * O.sales_amount) as SALES
FROM PRODUCT P LEFT JOIN OFFLINE_SALE O ON P.product_id = O.product_id
group by 1
order by 2 DESC,1 ASC

진료과별 총 예약 횟수 출력하기

SELECT MCDP_CD AS '진료과코드', COUNT(1) AS '5월예약건수'
FROM APPOINTMENT 
WHERE APNT_YMD LIKE '2022-05%' 
GROUP BY 1 
ORDER BY 2 ASC, 1 ASC

가격대 별 상품 개수 구하기

  • case when 조건 then 결과값 else end 구문
  • TRUNCATE(숫자,버릴 자릿수)
SELECT (
        CASE 
        WHEN PRICE <10000 THEN 0
        ELSE TRUNCATE(PRICE,-4)
        END) AS PRICE_GROUP, COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT 
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP

2~4번째 줄: CASE를 사용했다. PRICE가 1000보다 작을 경우 ➡️ 0
TRUNCATE : PRICE가 0보다 클 경우 ➡️ PRICE를 뒤에서부터 4개 삭제한다.

성분으로 구분한 아이스크림 총 주문량

SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER 
FROM FIRST_HALF A LEFT JOIN ICECREAM_INFO B ON A.FLAVOR = B.FLAVOR
GROUP BY 1
ORDER BY 2 ASC
profile
LV.1 아밥퍼

0개의 댓글