풀스택 sql - 20240813

김진아·2024년 8월 13일
0


## 2단계 : emp 테이블을 통해서 각 부서별 부서번호와 사원수를 출력해주세요. IT 부서는 누락되어도 됩니다.
## 3단계 : 2단계에서 부서번호를 부서명으로 변경해주세요. INNER JOIN 사용. IT 부서는 누락되어도 됩니다.
## 4단계 : LEFT JOIN 을 사용하여, IT부서가 노출되도록 하고 GROUP BY 를 해제해주세요. 사원이 없으면 인원이 0명으로 나오게 해주세요.
## 5단계 : GROUP BY 와 SUM 을 통해서 각 부서별 부서명과 사원수를 출력해주세요.
## 정답 v1 : SUM 과 IF 를 사용한 버전
## 6단계 : COUNT 를 통해서 각 부서별 부서명과 사원수를 출력해주세요.
## 정답 v2 : COUNT 를 사용한 버전


SELECT
    D.name AS '부서명',
    IFNULL(count(E.id), 0) AS '사원수'
FROM dept AS D
LEFT JOIN emp AS E
    ON E.deptId = D.id
GROUP BY D.id;

INSERT INTO emp SET name = "김철수", deptId = 3, salary = 5000;

CREATE TABLE project (
	id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
	name varchar(50) NOT NULL,
	regDate datetime NOT NULL DEFAULT now()
);
INSERT INTO project SET name = "전산 고도화";
INSERT INTO project SET name = "전산 유지보수";

CREATE TABLE project_detail (
	id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
	regDate datetime NOT NULL DEFAULT now(),
	projectId int UNSIGNED NOT NULL,
	expense int UNSIGNED NOT NULL,
	empId int UNSIGNED NOT null
);
INSERT INTO project_detail SET projectId = 1, expense = 1000, empId = 1;
INSERT INTO project_detail SET projectId = 1, expense = 500, empId = 4;
INSERT INTO project_detail SET projectId = 2, expense = 1000, empId = 1;
INSERT INTO project_detail SET projectId = 2, expense = 500, empId = 3;
INSERT INTO project_detail SET projectId = 2, expense = 1000, empId = 4;
SELECT * FROM project_detail;



//미션1
SELECT
	E.name AS '사원명',
	IFNULL(P.name, '미참여') AS '프로젝트명',
	ifnull(PD.expense, 0) AS '비용'
FROM project_detail AS PD
RIGHT JOIN project AS P
	ON PD.projectId= P.id
RIGHT JOIN emp AS E
	ON PD.empId = E.id
ORDER BY P.id;

//미션2
SELECT
	GROUP_CONCAT(E.name) AS '참여 사원 리스트',
	IFNULL(P.name, '미참여') AS '프로젝트명',
	ifnull(sum(PD.expense), 0) AS '비용합산'
FROM project_detail AS PD
RIGHT JOIN emp AS E
	ON PD.empId = E.id
RIGHT JOIN project AS P
	ON P.id = PD.projectId
GROUP BY p.id;
profile
https://develop-chick.tistory.com/ 첫번째 블로그

0개의 댓글