SQL ) LV4. 서울에 위치한 식당 목록 출력하기
접근법
- 서울에 위치한 식당별 리뷰 평균점수를 조회해야하므로 식당정보 테이블과 리뷰 테이블을 식당ID기준으로 JOIN후에, 식당ID별로 그룹화를 수행했다.
- 이후, AVG와 ROUND함수를 사용해 문제에서 요구한 조건대로 식당별 평균점수와 소수둘째자리까지 출력되도록 했다.
- 여기서 주의할 점은 주소 필터링하는 부분인데
- 서울에 위치할 경우 무조건 서울로 주소가 시작하니까, 주소의 첫 두글자가 서울인 레코드만 조회되도록 해야한다.
- 중간에 서울인 글자가 포함된걸로 해버리면 주소에 00서울00이런식으로 다른 단어가 포함된 것도 서울에 위치한 것으로 간주해버리니..
코드
SELECT I.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(REVIEW_SCORE),2) SCORE
FROM REST_INFO I JOIN REST_REVIEW R ON I.REST_ID = R.REST_ID
WHERE ADDRESS LIKE '서울%'
GROUP BY I.REST_ID
ORDER BY SCORE DESC, FAVORITES DESC;
SQL ) LV4. 오프라인/온라인 판매 데이터 통합하기
관련 개념
- UNION
- 쿼리 결과를 합칠 때 사용하며, 중복된 행은 제거한다.
- UNION ALL
- 쿼리 결과를 합칠 때 사용하며, 중복된 행은 제거하지 않는다.
접근법
- 온라인 판매 테이블, 오프라인 판매 테이블 각각 2022년에 3월에 판매한 상품 정보를 조회해야한다.
- 이때, 두 레코드 결과를 합해서 보여줘야 해서 UNION을 수행했다.
- 또한, 오프라인 판매 테이블에는 USER_ID칼럼이 존재하지 않기 때문에 NULL로 채워서 보여지도록 했다.
코드
(SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SUBSTR(SALES_DATE, 1, 7) = '2022-03')
UNION
(
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE, PRODUCT_ID, NULL AS UNSER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SUBSTR(SALES_DATE, 1, 7) = '2022-03'
)
ORDER BY 1, 2, 3;
SQL ) LV4. 보호소에서 중성화한 동물
접근법
- REGEXP쓸 떄 중간에 공백 주의하기
- 보호소에 들어올 때와 나갈때 정보가 들어있는 두 테이블을 ANIMAL_ID기준 JOIN연산 후에, 들어왔을 때 중성화 여부가 Intact, 나갈 떄 중성화 여부가 Spayed 또는 Netured인 레코드 조회
코드
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM ANIMAL_INS I JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.SEX_UPON_INTAKE REGEXP 'Intact'AND O.SEX_UPON_OUTCOME REGEXP 'Spayed|Neutered'
ORDER BY 1;
SQL ) LV4. 식품분류별 가장 비싼 식품의 정보 조회하기
접근법
- 서브쿼리로 식품분류와 식품분류별 최대가격을 반환해주고, WHERE절에서 서브쿼리 반환값과 일치하는 레코드 조회하도록 했다.
코드
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) IN (SELECT CATEGORY, MAX(PRICE) MAX_PRICE FROM FOOD_PRODUCT GROUP BY CATEGORY) AND CATEGORY REGEXP '과자|국|김치|식용유'
ORDER BY PRICE DESC;
'📕 SQL > MySQL' 카테고리의 다른 글
📕[SQL] 24.09.10 SQL (2) | 2024.09.12 |
---|---|
📕[SQL] 24.09.08 SQL (1) | 2024.09.08 |
📕[SQL] 24.09.06 SQL (1) | 2024.09.06 |
📕[SQL] 24.09.05 SQL (1) | 2024.09.05 |
📕[SQL] 24.09.04 SQL (4) | 2024.09.04 |