SQL

[MySQL] 250520 수업예제

개발자 누렁이 2025. 5. 20. 18:13
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