IT/DB
[SQL] 집약과 정렬, SQL문 순서
_KH_
2025. 2. 12. 19:24
■ 집약 : 열의 데이터 합계, 평균 같은 집계값을 구하기 위한 함수
- count : 검색된 행의 개수
- sum : 합계
- avg : 평균
- max : 최댓값
- min : 최솟값
■ 정렬
- group by : 그룹별로 묶음
- having : 그룹에 조건 부여
- order by : 정렬. 기준을 여러개 줄 수 있다. 각 필드마다 asc, desc 결정 가능. (오름차순/내림차순) * default : asc
- 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문 순서
- select 칼럼명 from 테이블명
- where 조건
- group by 칼럼
- having 조건
- order by 칼럼
- 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;