GROUP BY 9

[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.4 / 프로그래머스 / SQL] 주문량이 많은 아이스크림들 조회하기

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   풀이(MySQL) FIRST_HALF는 FLAVOR가 중복된 행이 없지만, JULY 테이블에는 같은 FLAVOR가 존재할 수 있다.  따라서 JULY 테이블 기준으로 FLAVOR를 그룹화하여 TOTAL_ORDER를 SUM 집계 함수로 다시 계산한 다음, FIRST_HALF와 조인하여 구하면 된다. SELECT JULY.FLAVORFROM JULYLEFT JOIN FIRST_HALFON FIRST_HALF.FLAVOR = JULY.FLAVORGROUP BY FLAVORORDER BY FIRST_HALF.TOTAL_ORDER..

[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.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.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..

[Lv.2 / 프로그래머스 / SQL] 동명 동물 수 찾기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) 중복된 이름의 동물의 수를 조회해야 한다. 단, 중복되지 않은 것을 모두 제외해야 하고 이름이 NULL인 것을 조회하면 안 된다. 이름별로 묶어 세야 하므로 GROUP BY와 COUNT를 이용해야 하고, 그 COUNT된 컬럼의 수가 2이상인 조건을 걸어줘야 한다. 여기서, WHERE이 아닌 HAVING에 입력해야 하는데 WHERE에 조건을 입력하면 Unknown column 'COUNT' in 'where clause' 과 같은 오류가 발생할 것이다. 이 예외는 SELECT 절 이전에 WH..

[Lv.2 / 프로그래머스 / SQL] 고양이와 개는 몇 마리 있을까

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) GROUP BY 와 함께 쓸 수 있는 함수인 COUNT를 이용해 ANIMAL_TYPE별로 개수를 세야 한다. 단, COUNT를 사용할 경우 지정한 컬럼의 데이터가 NULL인 행은 제외하고 가져온다. 따라서 * 기호를 사용해 모든 행을 불러오거나, NULLABLE이 아닌 컬럼을 지정하도록 하자. SELECT ANIMAL_TYPE , COUNT(ANIMAL_ID) AS count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE

반응형