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절에 바로 PRICEAMOUNT를 지정한다.
(이 과정에서 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)
없다를 표현하려면?len값이 0일때 [-1] 반환하기 if not answer) [-1] 반환하기오름차순 정렬로 출력하려면?sorted() 함수를 사용하기.append(값) 또는 list(값) 또는 [값] 활용하기