LEE_BOMB 2021. 9. 17. 20:52

๊ทธ๋ฃนํ•จ์ˆ˜ : ์ง‘๋‹จ๋ณ„ ํ†ต๊ณ„(์ง‘๊ณ„)๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
ํ†ต๊ณ„ํ•จ์ˆ˜ : ๋‹ค์ค‘ํ–‰(vector:1์ฐจ์›) -> ์ƒ์ˆ˜๊ฐ’(scala:0์ฐจ์›)
๋‹ค์ค‘ํ–‰์„ ์ž…๋ ฅํ•˜๋ฉด ํ•จ์ˆ˜์— ์˜ํ•ด ์ƒ์ˆ˜๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค. (1์ฐจ์›->0์ฐจ์›) = ์ฐจ์› ์ถ•์†Œ


1. SUM ํ•จ์ˆ˜

SELECT SUM(sal) FROM emp; -- empํ…Œ์ด๋ธ”์—์„œ 14๋ช…์˜ ๊ธ‰์—ฌ์˜ ํ•ฉ๊ณ„๊ฐ€ ์ถœ๋ ฅ (1๊ฐœ์˜ row)
-- SELECT sal FROM emp; ๋Š” 14๊ฐœ์˜ row. 
SELECT ename, SUM (sal) FROM emp; -- error ์ด์œ  : ename์€ 14ํ–‰, SUM์ ˆ์€ 1ํ–‰
SELECT SUM (comm) FROM emp; -- NULL ์ œ์™ธํ•˜๊ณ  ์—ฐ์‚ฐ



2. AVB ํ•จ์ˆ˜ (๋Œ€ํ‘œ๊ฐ’)

SELECT AVG(sal) FROM emp;


[์˜ˆ์ œ] ‘SCOTT’์‚ฌ์›์ด ์†Œ์†๋œ ๋ถ€์„œ์˜ ๊ธ‰์—ฌ ํ•ฉ๊ณ„์™€ ํ‰๊ท ์„ ๊ตฌํ•˜์‹œ์˜ค. (์„œ๋ธŒ์ฟผ๋ฆฌ ์ด์šฉ)

SELECT SUM(sal), AVG(sal)
FROM emp
WHERE deptno =
(SELECT deptno FROM emp WHERE ename='SCOTT');



3. MIN/MAX ํ•จ์ˆ˜ : ์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’

SELECT MAX(sal), MIN(sal) FROM emp; -- ์ตœ๋Œ€๊ธ‰์—ฌ, ์ตœ์†Œ๊ธ‰์—ฌ๊ฐ€ ์–ผ๋งˆ์ธ๊ฐ€
SELECT ename MAX(sal), MIN(sal) FROM emp; -- error. WHY? ๋‹จ์ผ ์นผ๋Ÿผ, ๊ทธ๋ฃนํ•จ์ˆ˜ ํ•จ๊ป˜ ์‚ฌ์šฉX


[์˜ˆ์ œ] ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ž…์‚ฌํ•œ ์‚ฌ์›์˜ ์ž…์‚ฌ์ผ๊ณผ ์ž…์‚ฌํ•œ์ง€ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์‚ฌ์›์˜ ์ž…์‚ฌ์ผ์„ ์ถœ๋ ฅํ•˜๋Š” ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. (MAX, MIN ํ•จ์ˆ˜ ์ด์šฉ)

SELECT * FROM emp;
SELECT
MIN (hiredate) "๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์ž…์‚ฌ์ผ", MAX(hiredate) "๊ฐ€์žฅ ์ตœ๊ทผ ์ž…์‚ฌ์ผ"
FROM emp;



4. COUNT ํ•จ์ˆ˜ : ํ•ด๋‹น ์นผ๋Ÿผ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ–‰์˜ ๊ฐœ์ˆ˜ (null ์ œ์™ธ)

SELECT COUNT (comm), COUNT(*) FROM emp;
SELECT COUNT(job) ์—…๋ฌด์ˆ˜ FROM emp; --์—…๋ฌด ์ˆ˜
SELECT COUNT(DISTINCT job) ์—…๋ฌด์ˆ˜ FROM emp; --์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์—…๋ฌด ์ˆ˜


[์˜ˆ์ œ] 30๋ฒˆ ๋ถ€์„œ ์†Œ์† ์‚ฌ์›์ค‘์—์„œ ์ปค๋ฏธ์…˜์„ ๋ฐ›๋Š” ์‚ฌ์›์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค

SELECT COUNT(*)
FROM emp
WHERE deptno=30 AND comm IS NOT NULL; -- 4๋ช… ์ถœ๋ ฅ. WHY? IS NOT NULL๋กœ๋Š”  ์ปค๋ฏธ์…˜ ๊ฐ’์ด 0์ธ ์‚ฌ๋žŒ๋„ ํ•จ๊ป˜ ์ถœ๋ ฅ

SELECT COUNT(*)
FROM emp
WHERE deptno=30 AND comm>0; -- 1์›์ด๋ผ๋„ ์ปค๋ฏธ์…˜ ๋ฐ›๋Š” ์‚ฌ๋žŒ์ด ์ถœ๋ ฅ๋จ

SELECT ename, comm, deptno
FROM emp
WHERE deptno=30 AND comm>0;



5. ๋ถ„์‚ฐ/ํ‘œ์ค€ํŽธ์ฐจ : ์‚ฐํฌ๋„(์ž๋ฃŒ๊ฐ€ ํฉ์–ด์ง„ ์ •๋„๋ฅผ ํ•˜๋‚˜์˜ ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฐ’)
* ๋ถ„์‚ฐ๊ณผ ํ‘œ์ค€ํŽธ์ฐจ๊ฐ€ ์ž‘์„์ˆ˜๋ก ์ž๋ฃŒ๊ฐ’๋“ค์ด ํ‰๊ท ์— ๋ชจ์—ฌ์žˆ์œผ๋ฏ€๋กœ ์ž๋ฃŒ์˜ ๋ถ„ํฌ ์ƒํƒœ๊ฐ€ ๊ณ ๋ฅธ ๊ฒƒ์ด๋‹ค.

SELECT VARIANCE(sal) FROM emp; -- ๋ถ„์‚ฐ
SELECT STDDEV(sal) FROM emp; -- ํ‘œ์ค€ํŽธ์ฐจ
SELECT SQRT(VARIANCE(sal)) FROM emp; --ํ‘œ์ค€ํŽธ์ฐจ

 


6. GROUP BY ์ ˆ : ํŠน์ • ์ปฌ๋Ÿผ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”

/*
SELECT ์นผ๋Ÿผ๋ช…, ๊ทธ๋ฃนํ•จ์ˆ˜
FROM ํ…Œ์ด๋ธ”๋ช…
WHERE ์กฐ๊ฑด (์—ฐ์‚ฐ์ž) 
GROUP BY ๋ฒ”์ฃผํ˜• ์นผ๋Ÿผ๋ช…;

* ๋ฒ”์ฃผํ˜•(์นดํ…Œ๊ณ ๋ฆฌํ˜•) ์นผ๋Ÿผ : ๋ถ€์„œ, ์ง๊ธ‰, ์„ฑ๋ณ„ ๋“ฑ ์ง‘๋‹จ์„ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์นผ๋Ÿผ
* ์—ฐ์†์„ฑ ์นผ๋Ÿผ : ๊ธ‰์—ฌ ๋“ฑ
*/

[์˜ˆ์ œ] ์†Œ์† ๋ถ€์„œ๋ณ„ ํ‰๊ท  ๊ธ‰์—ฌ๋ฅผ ๊ตฌํ•˜๊ธฐ
* ๊ทธ๋ฃน๋ฐ”์ด ์ ˆ์ด ์žˆ์œผ๋ฉด 'SELECT ์—ฌ๊ธฐ, ํ•จ์ˆ˜(์ธ์ˆ˜)'์— ์นผ๋Ÿผ๋ช… ์‚ฝ์ž… ๊ฐ€๋Šฅ
* ๊ทธ๋ฃน๋ฐ”์ด ์ ˆ์ด ์žˆ์œผ๋ฉด ์ผ๋ฐ˜ ์ง‘๊ณ„ํ•จ์ˆ˜(ROUND)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

SELECT deptno, ROUND (AVG(sal))
FROM emp
GROUP BY deptno;


[์˜ˆ์ œ] ์†Œ์† ๋ถ€์„œ๋ณ„ ์ตœ๋Œ€ ๊ธ‰์—ฌ์™€ ์ตœ์†Œ ๊ธ‰์—ฌ๋ฅผ ๊ตฌํ•˜๊ธฐ

SELECT deptno, MAX(sal), MIN(sal)
FROM emp 
GROUP BY deptno
ORDER BY deptno;

 


[์˜ˆ์ œ4] ๋ถ€์„œ๋ณ„๋กœ ๊ฐ€์žฅ ๊ธ‰์—ฌ๋ฅผ ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ์›์˜ ์ •๋ณด(์‚ฌ์› ๋ฒˆํ˜ธ, ์‚ฌ์›์ด๋ฆ„, ๊ธ‰์—ฌ, ๋ถ€์„œ๋ฒˆํ˜ธ)๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
(IN, MAX(), GROUP BY, subQuery ์ด์šฉ)

SELECT * FROM dept;
SELECT * FROM emp;

SELECT empno, ename, sal, deptno
FROM emp
WHERE sal IN
(SELECT MAX(sal) FROM emp GROUP BY deptno); -- ๊ฐ ๋ถ€์„œ์˜ ์ตœ๋Œ€ sal๊ฐ’ ์ถœ๋ ฅ (๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ)



7. HAVING์ ˆ : GROUP BY์ ˆ์—์„œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฒ€์ƒ‰
/*
์ผ๋ฐ˜ SQL๋ฌธ : WHERE ์กฐ๊ฑด์‹
GROUP BY์ ˆ : HAVING ์กฐ๊ฑด์‹
*/

SELECT deptno, AVG(sal) 
FROM emp
GROUP BY deptno
HAVING AVG(sal) >= 2000;

SELECT deptno, AVG(sal) 
FROM emp
GROUP BY deptno
WHERE AVG(sal) >= 2000; -- error. WHY? GROUP BY์ ˆ์—์„œ๋Š” WHERE (X)


[์˜ˆ์ œ] ๋ถ€์„œ์˜ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๋˜ ์ตœ๋Œ€ ๊ธ‰์—ฌ๊ฐ€ 2900์ด์ƒ์ธ ๋ถ€์„œ๋งŒ ์ถœ๋ ฅ

SELECT deptno, MAX(sal), AVG(sal)
FROM emp
GROUP BY deptno
HAVING MAX(sal) > 2900;

 


[์˜ˆ์ œ] ์˜ˆ์ œ4์˜ ๊ฒฐ๊ณผ์—์„œ 'SCOTT' ์‚ฌ์›์„ ์ œ์™ธํ•˜๊ณ , ๊ธ‰์—ฌ(SAL)๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์‹œ์˜ค.

SELECT empno, ename, sal, deptno
FROM emp
WHERE ename != 'SCOTT' AND sal IN -- AND์ ˆ์˜ sal์€ ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ๋„˜์–ด์˜จ ๊ฐ’
(SELECT MAX(sal) FROM emp GROUP BY deptno)
ORDER BY sal DESC;

 

 

 

 

 

์—ฐ์Šต๋ฌธ์ œ

 

/*
 * ์ง‘ํ•ฉ ํ•จ์ˆ˜(COUNT,MAX,MIN,SUM,AVG) 
 * ์ž‘์—… ๋Œ€์ƒ ํ…Œ์ด๋ธ” : EMP, STUDENT, PROFESSOR
 */

Q1. PROFESSOR ํ…Œ์ด๋ธ”์—์„œ POSITION์˜ ์ˆ˜ ์ถœ๋ ฅํ•˜๊ธฐ

SELECT COUNT (DISTINCT position) ์ง์œ„์ˆ˜
FROM professor;


Q2. EMP ํ…Œ์ด๋ธ”์—์„œ ์†Œ์† ๋ถ€์„œ๋ณ„ ์ตœ๋Œ€ ๊ธ‰์—ฌ์™€ ์ตœ์†Œ ๊ธ‰์—ฌ ๊ตฌํ•˜๊ธฐ

SELECT deptno, MAX(sal), MIN(sal)
FROM emp
GROUP BY deptno; -- ~๋ณ„๋กœ : GROPU  BY


Q3. EMP ํ…Œ์ด๋ธ”์—์„œ ์ „์ฒด ์‚ฌ์›์˜ ๊ธ‰์—ฌ์— ๋Œ€ํ•œ ๋ถ„์‚ฐ๊ณผ ํ‘œ์ค€ํŽธ์ฐจ ๊ตฌํ•˜๊ธฐ

SELECT VARIANCE(sal), STDDEV(sal) FROM emp; -- ๋ถ„์‚ฐ


Q4. EMP ํ…Œ์ด๋ธ”์—์„œ ๊ฐ ๋ถ€์„œ๋ณ„ ์‚ฌ์›์ˆ˜์™€ ์ˆ˜๋‹น์ด null ์•„๋‹Œ ์‚ฌ์›์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•˜์‹œ์˜ค.

--<์ถœ๋ ฅ ๊ฒฐ๊ณผ>
/*
๋ถ€์„œ๋ฒˆํ˜ธ     ์ „์ฒด์‚ฌ์›์ˆ˜     ์ˆ˜๋‹น์‚ฌ์›์ˆ˜
30        6        4  
20        5        0
10        3        0 
*/

SELECT deptno ๋ถ€์„œ๋ฒˆํ˜ธ, COUNT (*) ์ „์ฒด์‚ฌ์›์ˆ˜, COUNT (comm) ์ˆ˜๋‹น์‚ฌ์›
-- COUNT ํ•จ์ˆ˜์˜ ํŠน์ง• : NULL์ด ์•„๋‹Œ ๊ฐ’๋งŒ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— IS NOT NULL ๋ช…๋ น์ด ์—†์–ด๋„ ๋จ
FROM emp
GROUP BY deptno;


Q5. PROFESSOR ํ…Œ์ด๋ธ”์—์„œ ํ•™๊ณผ๋ณ„ ๊ธ‰์—ฌ(pay) ํ‰๊ท ์ด 400 ์ด์ƒ ๋ ˆ์ฝ”๋“œ ์ถœ๋ ฅํ•˜๊ธฐ

SELECT deptno, AVG(pay)
FROM professor
GROUP BY deptno -- ํ•™๊ณผ๋ณ„
HAVING AVG(pay) >= 400;


Q6. PROFESSOR ํ…Œ์ด๋ธ”์—์„œ ํ•™๊ณผ๋ณ„,์ง์œ„๋ณ„ ๊ธ‰์—ฌ(pay) ํ‰๊ท  ๊ตฌํ•˜๊ธฐ

SELECT deptno, AVG(pay)
FROM professor
GROUP BY deptno, position; -- 1์ฐจ : ํ•™๊ณผ๋ณ„, 2์ฐจ : ์ง์œ„๋ณ„ ์ถœ๋ ฅ
-- ๊ฐ™์€ ํ•™๊ณผ์˜ ๊ฐ™์€ ์ง์ฑ…๋ผ๋ฆฌ ๊ธ‰์—ฌ๋ฅผ ๊ณ„์‚ฐํ•ด์คŒ


Q7. STUDENT ํ…Œ์ด๋ธ”์—์„œ grade๋ณ„๋กœ weight, height์˜ ํ‰๊ท ๊ฐ’, ์ตœ๋Œ€๊ฐ’, ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•œ ๊ฒฐ๊ณผ์—์„œ ํ‚ค์˜ ํ‰๊ท ์ด 170 ์ดํ•˜์ธ ๊ฒฝ์šฐ ๊ตฌํ•˜๊ธฐ

SELECT grade, AVG(weight), MAX(weight), MIN(weight), AVG(height), MAX(height), MIN(height)
FROM student
GROUP BY grade -- grade๋ณ„
HAVING AVG(height) <=170 ; -- ํ‚ค ํ‰๊ท  170 ์ดํ•˜