초이준철
물낌표
초이준철
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • 경험 (6)
    • 책으로 배우는 공부 (11)
      • 통계 학습 (5)
      • 데이터 책 (6)
    • SQL (37)
    • Python (6)
    • Tableau (7)
      • Tableau 기본 (2)
      • Tableau 빅스데이터 22여름 대학생 TWBX (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • MYSQL 집계함수
  • 스터디 1일차
  • MYSQL group by
  • 물낌표
  • mysql set
  • mysql concat
  • MYSQL CASE문
  • MYSQL 테이블 구조
  • 데이터분석가
  • MYSQL desc
  • MYSQL insert
  • Mysql ifnull
  • 데이터리안
  • 데벨챌
  • 통계101x데이터 분석
  • 새빨간 거짓말 통계
  • mysql 문자열 자르기
  • TWBX 대학생
  • TWBX 과제
  • mysql 문자열 연결

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
초이준철

?!

[MySQL] 프로그래머스 문제 풀이 (feat. GROUP_CONCAT, INTERSECT 활용)
SQL

[MySQL] 프로그래머스 문제 풀이 (feat. GROUP_CONCAT, INTERSECT 활용)

2024. 2. 7. 17:48

프로그래머스 문제 LV.4

테이블에 대한 설명과 문제가 나와있습니다. 문제를 풀면서 'GROUP_CONCAT'과 'INTERSECT'를 공부해 볼게요.

 

첫 번째, 'GROUP_CONCAT' 활용 과정
SELECT CART_ID, NAME FROM CART_PRODUCTS;

 

우선 전체적인 테이블 결과를 보기 위해 기본 쿼리를 작성하면, 아래처럼 기본 형태가 나오게 돼요.

이제 여기서 장바구니 (CART_ID)에 'MILK'와 'YOGURT'를 동시에 담은 사람을 출력하면 됩니다.

 

그래서 첫 번째로 든 접근 방법은 NAME을 GROUP_CONCAT해서 묶어주는 거예요.

 

GROUP_CONCAT에 대한 자세한 설명은 아래 링크를 통해 알 수 있어요.

https://wnwa.tistory.com/34

 

[MySQL] 조건에 맞는 값들을 묶어서 출력하기 GROUP_CONCAT

1) 예시로 기본 사용법 알아보기 - 'department1' TABLE 기본 형태 - GROUP_CONCAT 함수 적용한 'department1' TABLE 위와 같이 '같은 팀' 조건에 해당하는 값들을 묶어서 출력하는 쿼리는 아래와 같습니다. SELECT t

wnwa.tistory.com

SELECT CART_ID, GROUP_CONCAT(NAME) AS NAME
FROM CART_PRODUCTS
GROUP BY CART_ID;

 

그러면 아래와 같은 형태가 출력되게 됩니다. 그 다음은 해당 테이블을 서브쿼리로 활용한 뒤, WHERE LIKE로 조건을 주면 끝이겠죠?

GROUP_CONCAT 결과

 

'GROUP_CONCAT' 최종 쿼리문
SELECT CART_ID
FROM (SELECT CART_ID, GROUP_CONCAT(NAME) AS NAME
FROM CART_PRODUCTS
GROUP BY CART_ID) AS GROUP_ID
WHERE NAME LIKE '%MILK%' AND NAME LIKE '%YOGURT%';

 

두 번째, 'INTERSECT' 활용 과정 및 자세한 설명

저는 항상 문제를 풀면 다른 사람의 풀이 과정도 함께 보는 편이에요. 그러다 'INTERSECT'에 대해서 처음 알게 되었어요.

원래 MYSQL에서 INTERSECT는 지원되지 않았는데 8.0.31부터 추가가 됐다고 해요 !

 

INTERSECT를 간략하게 설명하자면, INNER JOIN과 비슷해요 !

1. 두 개 이상의 SELECT 문의 공통된 결과를 반환

2. 두 테이블에서 공통으로 갖는 행만 결합하고 중복은 생략

 

아래는 INTERSECT를 활용한 최종 쿼리문이에요.

SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk'
INTERSECT
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt'

 

 

쿼리문에 대한 자세한 설명을 덧붙이자면, 원본 테이블을 보면 CART_ID는 중복되어 있어요.

원본 테이블

첫 번째 SELECT에서는 WHERE 조건문으로 'Milk'만 뽑았고, 두 번째 SELECT에서는 'Yogurt'만 뽑았어요.

 

각각의 결과를 좀 볼까요?

-- 첫 번재, Milk를 장바구니에 담은 CART_ID 출력
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk'

결과

 

-- 두 번째, 'Yogurt'를 장바구니에 담은 CART_ID 출력
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt'

 

그리고 ! 두 SELECT 사이에 'INTERSECT' 연산자를 넣어주면,

두 결괏값에서 공통적으로 존재하는 CART_ID만 추출되게 되는 거예요.

 

'INTERSECT' 최종 결과

INTERSECT 결과


이렇게 두 가지 방법을 통해 문제를 풀어봤어요! 아래 프로그래머스 문제 링크를 달아둘게요. 감사합니다 : )

https://school.programmers.co.kr/learn/courses/30/lessons/62284?language=mysql

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

저작자표시 (새창열림)
    'SQL' 카테고리의 다른 글
    • [MySQL] 프로그래머스 문제 풀이 (식품분류별 가장 비싼 식품의 정보 조회하기)
    • [MySQL] HackerRank Pivot Table 문제 (CASE문, SET, 서브쿼리 활용)
    • [MySQL] SET을 통해 변수 사용하기
    • [MySQL] 기본키, 외래키 값 변경에 대하여 (feat. on update cascade)
    초이준철
    초이준철
    WNWA

    티스토리툴바