๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฆ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค (DB) ๐Ÿ“ฆ/๐Ÿ…พ ์˜ค๋ผํด DB & SQL

GROUP BY๋ฌธ - ๋ฌธ์ œ 3

by Meteora_ 2021. 2. 10.
728x90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
--GROUP BY ํ™œ์šฉ
 
--๋ฌธ์ œ1) EMPLOYEES ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  SALESMAN(SA_MAN)์— ๋Œ€ํ•˜์—ฌ ๊ธ‰์—ฌ์˜
--ํ‰๊ท , ์ตœ๊ณ ์•ก, ์ตœ์ €์•ก, ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.
 
SELECT avg(salary), max(salary), min(salary), sum(salary)
FROM employees
WHERE job_id = 'SA_MAN';
 
--๋ฌธ์ œ2) EMPLOYEES ํ…Œ์ด๋ธ”์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ์ธ์›์ˆ˜, ๋ณด๋„ˆ์Šค๊ฐ€ NULL์ด ์•„๋‹Œ
--์ธ์›์ˆ˜, ๋ณด๋„ˆ์Šค์˜ ํ‰๊ท , ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ๋ถ€์„œ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋ผ.
SELECT count(*),count(commission_pct), avg(commission_pct * salary) , count(DISTINCT department_id)
FROM employees
WHERE commission_pct is not null;
 
 
SELECT
    *
FROM employees;
 
--๋ฌธ์ œ3) EMPLOYEES ํ…Œ์ด๋ธ”์—์„œ ๋ถ€์„œ๋ณ„๋กœ ์ธ์›์ˆ˜, ํ‰๊ท  ๊ธ‰์—ฌ, ์ตœ์ €๊ธ‰์—ฌ, ์ตœ๊ณ 
--๊ธ‰์—ฌ, ๊ธ‰์—ฌ์˜ ํ•ฉ์„ ๊ตฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋ผ.
SELECT department_id, count(department_id), trunc(avg(salary)), min(salary), max(salary), sum(salary) 
FROM employees
GROUP BY department_id
ORDER BY department_id ASC;
 
--๋ฌธ์ œ4) EMPLOYEES ํ…Œ์ด๋ธ”์—์„œ ๊ฐ ๋ถ€์„œ๋ณ„๋กœ ์ธ์›์ˆ˜,๊ธ‰์—ฌ์˜ ํ‰๊ท , ์ตœ์ € ๊ธ‰์—ฌ,
--์ตœ๊ณ  ๊ธ‰์—ฌ, ๊ธ‰์—ฌ์˜ ํ•ฉ์„ ๊ตฌํ•˜์—ฌ ๊ธ‰์—ฌ์˜ ํ•ฉ์ด ๋งŽ์€ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.
SELECT count(department_id),avg(salary) ,min(salary), max(salary), sum(salary) AS "๊ธ‰์—ฌ์˜ํ•ฉ" 
FROM employees
GROUP BY department_id
ORDER BY "๊ธ‰์—ฌ์˜ํ•ฉ" DESC;
 
--๋ฌธ์ œ5) EMPLOYEES ํ…Œ์ด๋ธ”์—์„œ ๋ถ€์„œ๋ณ„, ์—…๋ฌด๋ณ„ ๊ทธ๋ฃนํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ถ€์„œ๋ฒˆํ˜ธ, ์—…
--๋ฌด, ์ธ์›์ˆ˜, ๊ธ‰์—ฌ์˜ ํ‰๊ท , ๊ธ‰์—ฌ์˜ ํ•ฉ์„ ๊ตฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.
SELECT department_id, job_id, count(*), trunc(avg(salary)), sum(salary)
FROM employees
GROUP BY department_id, job_id;
 
 
--๋ฌธ์ œ6) EMPLOYEES ํ…Œ์ด๋ธ”์—์„œ ๋ถ€์„œ ์ธ์›์ด 4๋ช…๋ณด๋‹ค ๋งŽ์€ ๋ถ€์„œ์˜ ๋ถ€์„œ๋ฒˆํ˜ธ,
--์ธ์›์ˆ˜, ๊ธ‰์—ฌ์˜ ํ•ฉ์„ ๊ตฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.(GROUP BY, HAVING)
 
SELECT department_id, count(*), sum(salary)
FROM employees
GROUP BY department_id
HAVING count(*> 4;
 
--๋ฌธ์ œ7) EMPLOYEES ํ…Œ์ด๋ธ”์—์„œ ๊ธ‰์—ฌ๊ฐ€ ์ตœ๋Œ€ 10000์ด์ƒ์ธ ๋ถ€์„œ์— ๋Œ€ํ•ด์„œ ๋ถ€
--์„œ๋ฒˆํ˜ธ, ํ‰๊ท  ๊ธ‰์—ฌ, ๊ธ‰์—ฌ์˜ ํ•ฉ์„ ๊ตฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.
SELECT department_id, trunc(avg(salary)), sum(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) >= 10000;
 
 
--๋ฌธ์ œ8) EMPLOYEES ํ…Œ์ด๋ธ”์—์„œ ์—…๋ฌด๋ณ„ ๊ธ‰์—ฌ์˜ ํ‰๊ท ์ด 10000 ์ด์ƒ์ธ ์—…๋ฌด์—
--๋Œ€ํ•ด์„œ ์—…๋ฌด๋ช…,ํ‰๊ท  ๊ธ‰์—ฌ, ๊ธ‰์—ฌ์˜ ํ•ฉ์„ ๊ตฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋ผ.
SELECT job_id, trunc(avg(salary)), sum(salary)
FROM employees
GROUP BY job_id
HAVING AVG(salary)>=10000;
 
--๋ฌธ์ œ9) EMPLOYEES ํ…Œ์ด๋ธ”์—์„œ ์ „์ฒด ์›”๊ธ‰์ด 10000์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ ์—…๋ฌด์— ๋Œ€
--ํ•ด์„œ ์—…๋ฌด์™€ ๊ธ‰์—ฌ ํ•ฉ๊ณ„๋ฅผ ์ถœ๋ ฅํ•˜๋ผ. ๋‹จ ํŒ๋งค์›(SA_)์€ ์ œ์™ธํ•˜๊ณ  ์›” ๊ธ‰์—ฌ ํ•ฉ๊ณ„
--๋กœ ์ •๋ ฌ(๋‚ด๋ฆผ์ฐจ์ˆœ)ํ•˜๋ผ
SELECT job_id,  sum(salary)
FROM employees
WHERE job_id NOT LIKE 'SA_%'
GROUP BY job_id
HAVING AVG(salary)>10000
ORDER BY sum(salary) DESC;
cs

๋Œ“๊ธ€