CODEKATA : SQL49-51, ALGORITHM 25

COZY·2024년 4월 22일

CODEKATA

목록 보기
2/11
post-thumbnail

SQL 49번

SELECT CATEGORY,PRICE,PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')
AND PRICE IN (SELECT MAX(PRICE) FROM FOOD_PRODUCT GROUP BY CATEGORY)
GROUP BY CATEGORY
ORDER BY PRICE DESC

생각해 볼 포인트
1. 가격이 제일 비싼 '행'을 어떻게 출력할 것인가?
2. 어떻게 식품분류 4가지만 출력시킬 것인가?

이전에도 있었던 문제. 가장 큰 값의 행을 출력하는 문제.
가장 비싼 '행'을 출력하기 위해서는,
서브쿼리를 활용해야 한다는 사실을 이전 코드를 풀이하면서 인지하고 있었음.
다만, 조건을 두번에 걸쳐 넣어야 하고, 이번에는 한가지 품목이 아닌 총 4개의 품목을 출력해야 한다는 부분을 고민해야 했음.

WHERE절을 이용해 가격과 카테고리의 조건을 주기로 함.
WHERE-IN을 활용하고, 서브쿼리에 GROUP BY를 설정하기로 함.
IN 은 여러가지 조건에 해당하는 것을 불러옴. (마치 여러개의 OR를 한번에 묶어 사용하는 셈)
GROUP BY를 지정하면 한가지 결과가 아닌 지정한 그룹에 따라 각각의 MAX값이 출력됨.

SQL 50번

SELECT P.PRODUCT_ID,
       P.PRODUCT_NAME,
       (P.PRICE*SUM(O.AMOUNT))TOTAL_SALES
FROM FOOD_PRODUCT P JOIN FOOD_ORDER O ON P.PRODUCT_ID = O.PRODUCT_ID
WHERE O.PRODUCE_DATE LIKE '2022-05-%'
GROUP BY 1
ORDER BY 3 DESC, 1

생각해 볼 포인트
1. 총매출은 어떻게 계산할 것인가?
2. 날짜 조건은 어떻게 지정할 것인가?

날짜 조건은 WHERE 절에 LIKE를 줘서 컬럼 내 조건을 지정,
총매출은 총 판매수량품목별 가격이 될 것이고, 이는 ID나 NAME 등 동일품목으로 제한해야 했음. 이 부분은 GROUP BY를 통해 지정!
매출에 필요한 컬럼이 각기 다른 테이블에 있어 JOIN을 활용하여 테이블을 묶은 뒤 연산을 진행했다.
간단한 연산이므로 SELECT절에 바로 PRICE
AMOUNT를 지정한다.
(이 과정에서 SUM(AMOUNT)를 지정하지 않아 한 번 오류..ㅎ)
연산은 ()로 구분할 경우 순차 연산이 가능하므로 어렵지 않게 수식 설정이 가능했다.

SQL 51번

SELECT O.ANIMAL_ID,
       O.NAME
FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY 1

생각해 볼 포인트
1. 한쪽 테이블에만 존재하는 정보만 출력하려면 어떻게 해야할까?

두 테이블 중 어느 한 쪽만 해당되는 것을 보고싶은 경우, 필요로 하는 데이터가 있는 (FULL DATA상태인) 테이블을 기준으로 RIGHT/LEFT JOIN을 하면 된다.
이후 공백이 발생한 테이블의 컬럼이 있을테니, WHERE절에서 NULL값만 출력하게 하면 된다. 다만, 이 경우 NULL값이 어느 부분에 문제인지 알아야 하므로, 값이 있던 테이블에서 SELECT를 진행해주어야 한다.

ALGORITHM 25번

def solution(arr, divisor):
    answer = []
    for i in arr:
        if i%divisor == 0:
            answer.append(i)
    if not answer:
        return [-1]
    return sorted(answer)
  1. 나누어 떨어지는 수가 없다를 표현하려면?
  • len을 사용하여 len값이 0일때 [-1] 반환하기
  • answer가 아니라면(if not answer) [-1] 반환하기
  1. 리스트를 오름차순 정렬로 출력하려면?
  • 출력시 sorted() 함수를 사용하기
  1. 리스트에 값을 넣으려면?
  • .append(값) 또는 list(값) 또는 [값] 활용하기
profile
데이터분석 공부하는 비전공자

0개의 댓글