728x90
GROUP BY
@2024.05.02
단일행 함수
💡
하나의 행에 대해 연산을 수행하고 결과를 반환하는 함수로, 주로 WHERE 절이나 SELECT 문의 칼럼 목록에서 사용
- 종류
- ABS, CEILING, FLOOR, ROUND, UPPER, TRIM, CONCAT, SUBSTRING, REPLACE ,NOW 등
그룹 함수
💡
여러 행을 그룹화하고 그룹 단위로 연산을 수행한 후 결과를 반환하는 함수로,
일반적으로
GROUP BY 절과 함께 사용된다
일반적으로
GROUP BY 절과 함께 사용된다
- 종류
- 집계함수 ⇒ COUNT, SUM, AVG, MIN, MAX , GROUP_CONCAT, VARIANCE, STDDEV 등
-- 부서별(groupby) 평균 급여를 구해주세요, 단 평균 급여가 2000이하인 부서는 제외하고 조회하세요
select deptno, avg(sal) from emp group by deptno having avg(sal) > 2000;
-- 급여사 4500이상 1000이하의 사원은 제외하고 --- where절에서 거르고
-- 부서별(groupby) 평균 급여를 구하세요, 단 평균 급여가 2000이하인 부서는 제외하고 조회
select deptno, avg(sal)
from emp
where sal < 4500 and sal > 1000
group by deptno
having avg(sal) > 2000;
GROUP BY 절
💡
특정 열을 기준으로 결과를 그룹화하고, 그룹 단위로 집계 함수를 적용하여 요약된 결과를 얻을 때 사용
- 구성
- 그룹화
- GROUP BY 절은 결과를 특정 열의 값에 따라 그룹으로 나눈다.
- EX) 부서별로 직원을 그룹화하거나, 도시별로 주문을 그룹화
- 집계 함수와 함께 사용
- 그룹별로 데이터를 집계하고 요약하는 데 사용
- EX) 각 부서별로 직원의 수 계산, 각 도시별로 주문 총액 계산
- 그룹화
- 예시
-- 각 부서별로 직원수가 출력 SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department; -- 부서별 연봉 평균 출력 SELECT department_id , AVG(salary) FROM employees GROUP BY department_id;
- 주의 사항
- SELECT 절에 그룹 함수가 오면 나머지 칼럼은 GROUP BY 절에 기술되어야 한다.
- SELECT 절에 그룹 함수가 오거나, GROUP BY 절 이하에 기술된 칼럼이 오면
나머지 칼럼은
SELECT절 뒤에 기술할 수 없다.
- SELECT 절에 그룹 함수가 오거나, GROUP BY 절 이하에 기술된 칼럼이 오면
-- 잘못된 코드 : 그룹화하지 않은 salary가 SELECT 구절에 있기 때문 SELECT department, salary, COUNT(*) AS employee_count FROM employees GROUP BY department; -- 수정된 올바른 코드 1. salary를 GROUP BY 절에 추가한다. SELECT department, salary, COUNT(*) AS employee_count FROM employees GROUP BY department, salary; -- 수정된 올바른 코드 2. salary에 집계함수를 사용한다. SELECT department, AVG(salary) AS avg_salary, COUNT(*) AS employee_count FROM employees GROUP BY department;
- GROUP에 대한 조건은 WHERE 절에 기술할 수 없고, HAVING 절에 기술되어야 한다.
-- 잘못된 코드 -- 그룹 함수인 AVG(salary)를 사용하여 생성된 avg_salary열은 WHERE절에서 사용할 수 없다. SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department WHERE avg_salary > 5500; -- 수정된 코드 SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING avg_salary > 5500;
- SELECT 절에 그룹 함수가 오면 나머지 칼럼은 GROUP BY 절에 기술되어야 한다.
728x90
'MYSQL' 카테고리의 다른 글
SUBQUERY (0) | 2024.05.07 |
---|---|
조인 (0) | 2024.05.07 |
형 변환 (0) | 2024.05.05 |
[내장 함수] 집계 함수 (0) | 2024.05.05 |
[내장 함수] 날짜형 함수 (0) | 2024.05.05 |