728x90
반응형
-- 해당 테이블의 전체레코드 수를 반환
SELECT
COUNT(*) 직원수
FROM
emp;
select * from emp; -- 이렇게 했을때의 행의 수를 반환
select count(-1) 직원수 from emp; -- -1은 데이타의 마지막을 의미, 성능상 더 좋다.
-- 그룹함수는 원래 null을 건너뛴다. 카운트를 안한다.
select count(mgr) from emp;
-- empno 기본키 제약조건
-- not null + unique
select count(empno) from emp;
select count(empno), round(avg(sal), 2) 평균급여,
min(sal), max(sal), sum(sal)
from emp;
-- emp테이블에서 입사한지 가장 오래된 사원과 가장 최근에 입사한 사원을 각각 검색하세요
select max(hiredate), min(hiredate)
from emp;
-- 부서번호가 10번이거나, 20번인 사원수를 검색
SELECT count(empno) 사원수
from emp
where deptno in(10, 20);
-- emp테이블에서 등록된 사원수(c1), comm이 null이 아닌 직원수(c2), comm을 받는
-- 직원들의 comm값의 평균(c3)을 각각 구하세요
-- comm의 평균값을 구하는 것이기에 직원 전체인원수로 나눠야한다.
select count(-1) c1, count(comm) c2, round(avg(ifnull(comm, 0))) c3
from emp;
-- emp 테이블에 등록되어져 있는 부서의 갯수, 업무의 갯수를 검색
SELECT count(DISTINCT(deptno)) 부서수, count(DISTINCT(job)) 업무수
from emp;
-- 부서별 평균급여를 조회
/*그룹함수에 포함되지 않는 컬럼이 select절 뒤에 명시될수 없다.
아래 sql문이 실행되려면 deptno로 그룹을 세분화 시켜야 한다.
group by절이 필요하다. */
SELECT deptno, round(avg(sal))
FROM emp;
-- step 1.
SELECT deptno, round(avg(sal))
FROM emp;
-- step 2.
SELECT deptno, round(avg(sal))
FROM emp
GROUP BY deptno; -- 그룹핑, 세분화
-- step 3.
SELECT deptno DNumber, round(avg(sal)) AvgSalary
FROM emp
GROUP BY deptno;
/* 서버 실행순서
FROM --> WHERE --> GROUP BY --> SELECT --> ORDER BY
실행순서를 감안하면 GROUP BY절 뒤에 Alias사용 못한다.
그런데 MySQL은 Group By절 뒤에 별칭 붙어도 실행된다.
*/
-- step 4.
SELECT deptno DNumber, round(avg(sal)) AvgSalary
FROM emp
WHERE DEPTNO != 10
GROUP BY DNumber;
-- step 5.
SELECT deptno DNumber, round(avg(sal)) AvgSalary
FROM emp
WHERE DEPTNO != 10
GROUP BY DNumber
ORDER BY 1;
-- 입사년도별 사원수를 출력
-- 입사년도 그룹핑 하고, 사원수는 카운트로
SELECT year(hiredate) 입사년도별, count(empno) 사원수
FROM emp
GROUP BY 입사년도별
ORDER BY 1;
SELECT date_format(hiredate, '%Y') 입사년도별, count(empno) 사원수
FROM emp
GROUP BY 1
ORDER BY 1;
SELECT substr(hiredate, 1, 4) 입사년도별, count(empno) 사원수
FROM emp
GROUP BY 1
ORDER BY 1;
728x90
반응형
'SQL' 카테고리의 다른 글
[MySQL] 250521 수업예제 (1) | 2025.05.21 |
---|---|
[MySQL] 250519 수업예제 (0) | 2025.05.20 |
[MySQL] 250516 수업예제 (0) | 2025.05.20 |