LEE_BOMB 2021. 9. 18. 21:57
GROUP BY?

์นผ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์„ ๋•Œ ์‚ฌ์šฉ

 

 

๊ทธ๋ฃนํ•จ์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋‚˜๋ˆ„๊ณ ์ž ํ•˜๋Š” ๊ทธ๋ฃน์˜ ์นผ๋Ÿผ๋ช…์„ SELECT์ ˆ๊ณผ GROUP BY์ ˆ ๋’ค์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

์ง‘๊ณ„ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ์ƒ์ˆ˜๋Š” GROUP BY ์ ˆ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

* '๋ถ€์„œ๋ณ„ ๊ธ‰์—ฌํ‰๊ท ' ์ฒ˜๋Ÿผ '~๋ณ„' ์„ ๊ตฌํ•œ๋‹ค.

 

 

 

 

 

๊ทธ๋ฃนํ•จ์ˆ˜(=์ง‘๊ณ„ํ•จ์ˆ˜)

GROUP BY์ ˆ์„ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ฃน ๋‹น ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋กœ ๊ทธ๋ฃนํ™”

HAVING์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ์กฐ๊ฑด ๋น„๊ต ๊ฐ€๋Šฅ

WHERE ์ ˆ์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ

 

ROUND(์†Œ์ˆ˜,๋ฐ˜์˜ฌ๋ฆผํ•  ์ž๋ฆฌ ์ˆ˜) : ์†Œ์ˆ˜์  ๋ฐ˜์˜ฌ๋ฆผ

TRUNCATE(์†Œ์ˆ˜,์ ˆ์‚ญํ•  ์ž๋ฆฌ ์ˆ˜) : ์†Œ์ˆ˜์  ์•„๋ž˜ ๋‹จ์ˆœ ์ ˆ์‚ญ

* ์ ˆ์‚ญํ•  ์ž๋ฆฌ ์ˆ˜์˜ ์Œ์ˆ˜ ์ง€์ • ๊ฐ€๋Šฅ

ABS() : ์ ˆ๋Œ€๊ฐ’

COUNT() : ํ–‰์˜ ๊ฐœ์ˆ˜

SUM() : ์ด ํ•ฉ

MIN() : ์ตœ์†Œ๊ฐ’

MAX() : ์ตœ๋Œ€๊ฐ’

AVG() : ํ‰๊ท ๊ฐ’

STDDEV : ํ‘œ์ค€ํŽธ์ฐจ

* MIN, MAX ํ•จ์ˆ˜๋Š” ๋ชจ๋“  ์ž๋ฃŒํ˜•์— ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

HAVING

GROUP BY์ ˆ์—์„œ ์กฐ๊ฑด์ง€์ • ์‹œ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด๋ฌธ

์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์กฐ๊ฑด๋น„๊ต๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉ

 

 

 

 

[ํ€ด์ฆˆ] GROUP BY ๊ธฐ์ดˆ ๋ฌธ์ œ

1. ๋‹ค์Œ GROUP BY ์ง‘๊ณ„์ฟผ๋ฆฌ์˜ ์˜๋ฏธ๋ฅผ ์„ค๋ช…ํ•˜์„ธ์š”.
2. ์ฟผ๋ฆฌ์˜ ๋ฌธ์ œ์ ์„ ์„ค๋ช…ํ•˜๊ณ 

3. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋ณด์„ธ์š”.

SELECT ๋ถ€์„œ, SUM(๊ธ‰์—ฌ) ๊ธ‰์—ฌ
FROM ์‚ฌ์›
HAVING COUNT(*) > 3
GROUP BY ๋ถ€์„œ
ORDER BY SUM(๊ธ‰์—ฌ) DESC
;

 

1. ์‚ฌ์›์ด 3๋ช…์ด ๋„˜๋Š” ๋ถ€์„œ ๋ณ„, ๊ธ‰์—ฌ ํ•ฉ๊ณ„๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ๋ฌธ

2. ์ง‘๊ณ„ํ•จ์ˆ˜ ์ค‘์ฒฉ์‚ฌ์šฉ์œผ๋กœ erorr ๋ฐœ์ƒ

SELECT์ ˆ์˜ SUM(๊ธ‰์—ฌ)์—์„œ (๊ธ‰์—ฌ)๋Š” ์‚ฌ์› ํ…Œ์ด๋ธ”์˜ ๊ธ‰์—ฌ ์นผ๋Ÿผ, ORDER BY์ ˆ์˜ SUM(๊ธ‰์—ฌ)์—์„œ์˜ (๊ธ‰์—ฌ)๋Š” SELECT ์ ˆ์˜ SUM(๊ธ‰์—ฌ)์— ๋Œ€ํ•œ ๋ณ„์นญ์„ ์˜๋ฏธ. ์ฆ‰ ORDER BY SUM(๊ธ‰์—ฌ) >> ORDER BY SUM(SUM(๊ธ‰์—ฌ))

3. ORDER BY์ ˆ์„ SUM(์‚ฌ์›.๊ธ‰์—ฌ) DESC๋กœ ์ˆ˜์ •ํ•˜์—ฌ ํ…Œ์ด๋ธ”๋ช… ๋ช…์‹œ

* GROUP BY ์™€ HAVING ์ ˆ์€ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ๋˜์ง€๋งŒ ์›์น™ ๋”ฐ๋ฅด๊ธฐ๋ฅผ ๊ถŒ์žฅ

 

 

 

[ํ€ด์ฆˆ2] https://www.bullraider.com/quiz/sql-quiz/sql-group-by-order-by-and-having

The Oracle server implicitily sort the ResultSet in ascending order by using Group By clause .

  1. true
  2. false


Order by is to sort ResultSet either in ascending or descending order .

  1. true 
  2. false


Which statements  are true about Group By ?

  1. Group By is used to group set of values based on one or more values
  2. Group By is used when we use aggregate functions 
  3. Group by does not guaranteed sorts the data in any order
  4. All of above

 

How to select  Maximum Salary of Employee from each Department ?

  1. Select deptno, sal from Emp Group By deptno Order By Max(Sal);
  2. Select deptno, sal from Emp Group By deptno Order By Max(Sal);
  3. Select dept_id, sal from Emp Group By dept_id Order By Max(Sal);
  4. Select deptno, max(sal) from Emp Group By deptno;


'Having' clause is used with

  1. Group By
  2. Order By
  3. Both of above


What is the correct format to select Emp_name in Ascending order ?

  1. Select Emp_name From Emp ;
  2. Select Emp_name From Emp Group By Emp_name ;
  3. Select Emp_name From Emp Order By Emp_name ;
  4. All of above


What is the correct format to select Emp_name in Ascending order ?

  1. Select Emp_name From Emp ;
  2. Select Emp_name From Emp Group By Emp_name ;
  3. Select Emp_name From Emp Order By Emp_name ;
  4. All of above


How o select number of employee department wise from Emp table ?

  1. Select deptno, count(*) from Emp Group By deptno;
  2. Select empno,deptno, count(*) from Emp Group By deptno;
  3. Select deptno, count(*) from Emp Order By deptno;
  4. Select empno, count(*) from Emp Order By deptno;


Which of the following is correct to count the total salary in deptno wise where more than two employees exist ?

  1. SELECT deptno, sum(sal) As totalsal FROM emp GROUP BY deptno HAVING COUNT(empno) = 2
  2. SELECT deptno, sum(sal) As totalsal FROM emp GROUP BY deptno where COUNT(empno) = 2
  3. SELECT deptno, sum(sal) As totalsal FROM emp GROUP BY deptno HAVING COUNT(empno) > 2
  4. SELECT deptno, sum(sal) As totalsal FROM emp GROUP BY deptno where COUNT(empno) > 2


Both 'having' and 'where' clause can be used in aggregate functions.

  1. true
  2. false

 

[์ •๋‹ต] a a d d a c c a c b

 

 

 

 

์ฐธ๊ณ ํ•œ ๊ฐœ๋…์ดํ•ด ์˜์ƒ https://youtu.be/Yvuw0dbd7OQ