SQL 쿼리 연습/GROUP BY 12

[Lv.2 / 프로그래머스 / SQL] 조건에 맞는 사원 정보 조회하기

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   풀이(MySQL) HR_DEPARTMENT 테이블은 문제 해결을 위해 불필요하다. 따라서 HR_EMPLOYEES, HR_GRADE 두 테이블로 문제를 해결할 수 있다. 핵심은 상반기 하반기의 점수를 합쳐서 내림차순으로 정렬을 하는 것이다. HALF_YEAR야 어찌 되었든, 한 사원 당 YEAR 별 SCORE는 상반기와 하반기 최대 두 개가 존재할 것이므로, EMP_NO만 그룹으로 묶어 SCORE를 집계한다면 한 해의 총 점수를 구할 수 있을 것이다.  따라서 EMP_NO 컬럼을 기준으로 GROUP BY로 묶은 뒤, SUM() 집계 함수로 SCORE의 합..

[Lv.2 / 프로그래머스 / SQL] 성분으로 구분한 아이스크림 총 주문량

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  풀이(MySQL) JOIN을 통해 각 FLAVOR의 INGREDIENT_TYPE을 구한 뒤, 그 타입별로 TOTAL_ORDER의 합계를 구해야 한다.  타입별로 묶어야 하므로 GROUP BY를 통해 그룹화해서 문제를 해결할 수 있다. SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDERFROM FIRST_HALFINNER JOIN ICECREAM_INFOON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVORGROUP BY INGREDIENT_TYPEORD..

[Lv.2 / 프로그래머스 / SQL] 노선별 평균 역 사이 거리 조회하기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   풀이 노선별로 총 거리와 평균 거리를 반환해야 한다. 주의해야 할 점은 총 누계 거리를 기준으로 내림차순 정렬을 해야 하는데, TOTAL_DISTANCE를 그대로 정렬 기준으로 삼는다면 문자열이기 때문에 정확한 크기 비교가 되지 않는다. 따라서 문자열 형태가 아니라 숫자 형태로 비교를 해야 한다. SELECT ROUTE, CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE, CONCAT(ROUND(AVG(D_BETWEEN_DIST), ..

[Lv.2 / 프로그래머스 / SQL] 월별 잡은 물고기 수 구하기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   풀이 연도(year)와 일(day) 상관 없이 월별로 잡은 물고기의 수를 그룹화하여 출력해야 한다.MONTH 함수를 이용하여 월만 뽑아낸 컬럼인  MONTH 별로 그룹화한 뒤, 집계 함수 COUNT를 사용하여 물고기의 합계를 구한다. SELECT COUNT(*) AS FISH_COUNT, MONTH(TIME) AS MONTHFROM FISH_INFOGROUP BY MONTHORDER BY MONTH

[Lv.3 / 프로그래머스 / SQL] 부서별 평균 연봉 조회하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) 부서의 고유한 아이디인 DEPT_ID를 GROUP BY로 묶어 평균 연봉을 조회한다. 이 때, 부서의 영문 이름을 출력해야 하므로 HR_DEPARTMENT와 JOIN 하여 이름을 구해서 같이 출력해야 한다. SELECT E.DEPT_ID, DEPT_NAME_EN, ROUND(AVG(SAL)) AS AVG_SAL FROM HR_EMPLOYEES AS E INNER JOIN HR_DEPARTMENT AS D ON E.DEPT_ID = D.DEPT_ID GROUP BY E.DEPT_ID ORDE..

[Lv.2 / 프로그래머스 / SQL] 물고기 종류 별 잡은 수 구하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) 물고기의 종류별로 개수를 출력해야 한다. FISH_TYPE 대신 FISH_NAME을 출력해야 하므로 JOIN을 통해 해결해야 한다. SELECT COUNT(*) AS FISH_COUNT, FISH_NAME FROM FISH_INFO LEFT JOIN FISH_NAME_INFO ON FISH_INFO.FISH_TYPE = FISH_NAME_INFO.FISH_TYPE GROUP BY FISH_NAME_INFO.FISH_NAME ORDER BY FISH_COUNT DESC

[Lv.2 / 프로그래머스 / SQL] 재구매가 일어난 상품과 회원 리스트 구하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) 재구매가 일어난 상품 리스트를 조회해야 한다. USER_ID와 PRODUCT_ID를 기준으로 묶어, PRODUCT_ID의 개수가 2 이상인 것을 조회하면 재구매라고 판별할 수 있다. SELECT USER_ID, PRODUCT_ID FROM ONLINE_SALE GROUP BY USER_ID, PRODUCT_ID HAVING COUNT(PRODUCT_ID) > 1 ORDER BY USER_ID ASC, PRODUCT_ID DESC

[Lv.3 / 프로그래머스 / SQL] 조건에 맞는 사용자와 총 거래금액 조회하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) USED_GOODS_BOARD에서 STATUS가 'DONE'인 물건들의 가격 총 합이 70만원 이상인 사용자들을 조회해야 한다. 두 테이블의 정보를 함께 조회해야 하므로 아이디를 기준으로 INNER JOIN을 하였다. 이후, 사용자 아이디별로 PRICE를 합해야 하므로 GROUP BY를 통해 아이디별로 묶어주었다. SELECT USER.USER_ID, USER.NICKNAME, SUM(BOARD.PRICE) AS TOTAL_SALES FROM USED_GOODS_USER AS USER IN..

[Lv.2 / 프로그래머스 / SQL] 입양 시각 구하기(1)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) DATETIME 타입에서 시간을 추출하여 그룹별로 묶었을 때, 그 개수를 같이 조회해야 한다. HOUR() 함수를 통해 DATETIME에서 시간을 구할 수 있다. SELECT HOUR(DATETIME) AS HOUR, COUNT(ANIMAL_ID) AS COUNT FROM ANIMAL_OUTS GROUP BY HOUR HAVING HOUR >= 9 AND HOUR < 20 ORDER BY HOUR

[Lv.3 / 프로그래머스 / SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) FOOD_TYPE별로 FAVORITES가 가장 높은 식당의 ID와 NAME을 함께 출력해야 한다. 필자는 FOOD_TYPE별 가장 높은 FAVORITES를 추린 뒤, WHERE절에서 비교하여 가져오는 방식으로 해결했다. Implicit Join SELECT A.FOOD_TYPE , REST_ID , REST_NAME , FAVORITES FROM REST_INFO AS A , ( SELECT FOOD_TYPE , MAX(FAVORITES) AS MAX_FAVORITES FROM REST_I..

반응형