자두의 데브로그

[MySQL] SQL 문제 풀이 - SUM, MAX, MIN 본문

코딩테스트/문제 풀이

[MySQL] SQL 문제 풀이 - SUM, MAX, MIN

왕자두 2024. 7. 30. 15:55

가장 비싼 상품 구하기

-- 코드를 입력하세요
SELECT MAX(PRICE) AS MAX_PRICE FROM PRODUCT;

 

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

-- 코드를 입력하세요
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE FROM FOOD_PRODUCT WHERE PRICE = (
    SELECT MAX(PRICE) FROM FOOD_PRODUCT
);

 

[새로 알게 된 점]

  • 집계 함수와 함께 출력하는 다른 속성들은 모두 첫 번째 값을 출력하게 된다.
  • 중첩 SQL문을 통해 필요로 하는 값을 갖는 경우에 대해 WHERE 조건을 걸면 된다.

최솟값 구하기

-- 코드를 입력하세요
SELECT MIN(DATETIME) FROM ANIMAL_INS;

 

[새로 알게 된 점]

  • DATETIME 속성의 값도 최솟값을 구하기 위해서는 MIN() 함수를 사용하면 된다.

동물 수 구하기

-- 코드를 입력하세요
SELECT COUNT(*) FROM ANIMAL_INS;

 

중복 제거하기

-- 코드를 입력하세요
SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS WHERE NAME is not null;

 

[새로 알게 된 점]

  • 중복되는 속성을 제외하고 출력하기 위해서는 DISTINCT 를 사용한다.

조건에 맞는 아이템들의 가격의 총합 구하기

-- 코드를 작성해주세요
SELECT SUM(PRICE) AS TOTAL_PRICE FROM ITEM_INFO WHERE RARITY = "LEGEND";

 

물고기 종류 별 대어 찾기

# -- 코드를 작성해주세요
# SELECT i.ID, FISH_NAME, LENGTH FROM FISH_INFO i JOIN FISH_NAME_INFO n ON i.FISH_TYPE = n.FISH_TYPE WHERE LENGTH IN (
#     SELECT MAX(LENGTH) FROM FISH_INFO f GROUP BY f.FISH_TYPE
# )
# ORDER BY i.ID;

# WITH FISH AS (
#     SELECT ID, FISH_NAME, LENGTH FROM FISH_INFO i 
#     JOIN FISH_NAME_INFO n 
#     ON i.FISH_TYPE = n.FISH_TYPE
#     WHERE LENGTH IN (
#         SELECT MAX(LENGTH) FROM FISH_INFO GROUP BY FISH_TYPE
#     )
#     ORDER BY ID
# )
# SELECT ID, FISH_NAME, LENGTH FROM FISH;

SELECT ID, FISH_NAME, LENGTH FROM FISH_INFO i JOIN FISH_NAME_INFO n ON i.FISH_TYPE = n.FISH_TYPE WHERE (i.FISH_TYPE,LENGTH) IN (
    SELECT FISH_TYPE, MAX(LENGTH) FROM FISH_INFO GROUP BY FISH_TYPE
)
ORDER BY ID;

 

[새로 알게 된 점]

  • WITH 사용하는 방법 - 임시 테이블 만들어서 사용 가능 (근데 이거로 문제 풀었지만 틀림)
  • IN 사용할 때 여러 컬럼 넣을 수 있음!
  • GROUP BY 다음에 ORDER BY 오는 것!
  • USING - 테이블을 JOIN할 때 ON으로 하지 않고 컬럼명이 같은 경우 USING을 통해 JOIN 할 수도 있다. (아래 참고)
SELECT ID, FISH_NAME, LENGTH FROM FISH_INFO JOIN FISH_NAME_INFO USING(FISH_TYPE) WHERE (FISH_TYPE,LENGTH) IN (
    SELECT FISH_TYPE, MAX(LENGTH) FROM FISH_INFO GROUP BY FISH_TYPE
)
ORDER BY ID;

 

연도별 대장균 크기의 편차 구하기

-- 코드를 작성해주세요
WITH MAX_SIZE AS (
    SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR, MAX(SIZE_OF_COLONY) AS SIZE FROM ECOLI_DATA
    GROUP BY YEAR
)
SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR, SIZE - SIZE_OF_COLONY AS YEAR_DEV, ID FROM ECOLI_DATA E JOIN MAX_SIZE M ON YEAR(DIFFERENTIATION_DATE) = M.YEAR
ORDER BY YEAR, YEAR_DEV;

 

[새로 알게 된 점]

  • DATE_FORMAT 사용하면 결과 값이 String으로 출력돼서 YEAR() 함수를 사용해서 문제를 풀어야 한다.
  • ON 에 사용하는 속성의 경우, ALIAS로 설정한 별명으로 출력하려고 하면 안된다. ex. E.YEAR = M.YEAR 은 오류남!
  • ORDER BY는 SELECT 이후에 실행돼서 ALIAS로 설정해도 되는 것 같다!