IT/DB

[SQL] 집약과 정렬, SQL문 순서

_KH_ 2025. 2. 12. 19:24

집약 : 열의 데이터 합계, 평균 같은 집계값을 구하기 위한 함수

  1. count : 검색된 행의 개수
  2. sum : 합계
  3. avg : 평균
  4. max : 최댓값
  5. min : 최솟값

 

정렬 

  1. group by : 그룹별로 묶음
  2. having : 그룹에 조건 부여
  3. order by : 정렬. 기준을 여러개 줄 수 있다. 각 필드마다 asc, desc 결정 가능. (오름차순/내림차순)  * default : asc
  4. limit : 시작번지, 개수 => 시작번지부터 개수만큼 추출
컴퓨터 학과의 성적 합계 구하기
- major, sum

산술연산자 + 는 같은 튜플의 속성 합계
= 같은 속성끼리의 합 == SUM

(EX. 컴공과 학생들의 점수 합 = SUM, 한 학생의 국어/영어/수학 점수 합 = 그냥 +)

select SUM(score) from student where major = 'Computer';
select SUM(score) as 평균 from student where major = 'Computer';
select major, sum(score) as sum from student where major = 'computer';
select major, sum(score) as sum from student where major = 'Enghlish';

max, avg, min 구하기
select major, max(score) from student group by major;

select major, count(*) from student where major = 'english';
select major, count(num) from student where major = 'english';

select major, sum(score) from student group by major;
// 각 과별로 그룹화

SQL문 순서

  1. select 칼럼명 from 테이블명
  2. where 조건
  3. group by 칼럼
  4. having 조건
  5. order by 칼럼
  6. limit 

□ 생략이 가능하지만 순서는 반드시 지켜야 함.

 

□ 문제 풀이

select major, sum(score) as sum
from student
group by major 
order by sum desc;

select * from student limit 0,3 ;// 0번지부터 3개

---- 1, 2, 3등 출력
select * from student order by score desc limit 0,3;

---- tel null 인자로 검색
select * from student where tel is null;
select * from student where tel is not null;

--- 성별, 성적, 평균 출력
select gender, avg(score) from student group by gender order by desc;
// 이미 gender끼리 묶은 상황에서 score를 출력하면 에러가 남

select count(*), avg(score) as '평균' from student group by gender order by '평균' desc;
// desc를 선택할 수 있는 평균? 카운트?가 2개여서 하나를 선택해줘야함.. 
// 소숫점은 round()로.. 없앤다?

--- 컴퓨터 학과와 영어 학과의 점수 합계만 나타내기
select major, sum(score) as s from student group by major having major in ('computer', 'english');

--- 각 과별 성적 합계가 250 이상인 학과만 출력
select major, sum(score) from student group by major having sum(score) => 250;
// where이 아니라 having에서 조건을 줘야 한다!
// where에서만 줄 수 있는 조건, having에서만 줄 수 있는 조건, 둘 다 줄 수 있는 조건....

--- student 테이블에 grade(학년) 필드 추가하고 각 grade에 맞게 조건.. ㅇ?
-- 20 1 21 2 22 3 23,24 4
alter table student add grade int;

update student set grade = 1 where age = 20;
update student set grade = 2 where age = 21;
update student set grade = 3 where age = 22;
update student set grade = 4 where age in (23, 24);

----강사님 코드----
alter table student add grade int default 1;

 

■ 조건을 나타내는 함수

: if~else, case~when~then문(= switch)

□ if문은 mysql에만 존재

 

■ if문

if(조건식, 참, 거짓)
if(조건식, 참, if(조건식, 참, 거짓(이중 조건식 가능))

 

■ case문

- case문
when 조건 then 값
when 조건 then 값
when 조건 then 값
when 조건 then 값
else 값
end;