반응형
Group by뒤의 조건: having
-- group by의 결과에 대해서 조건을 걸 때는 having을 사용한다. 그 뒤에 and 및 or도 사용 가능하다.
group by 컬럼명 having 묶음 후의 조건
-- 각 고객별로 주문 금액 평균이 300 달러 이상인 데이터만 가져오시오.
select c.first_name, c.last_name, avg(o.amount) as AVG from customers c join orders o on c.id = o.customer_id group by c.id having avg(o.amount) >= 300; |
-- 실습
students, papers 테이블 생성 후,
INSERT INTO students (first_name) VALUES ('Caleb'), ('Samantha'), ('Raj'), ('Carlos'), ('Lisa'); INSERT INTO papers (student_id, title, grade ) VALUES (1, 'My First Book Report', 60), (1, 'My Second Book Report', 75), (2, 'Russian Lit Through The Ages', 94), (2, 'De Montaigne and The Art of The Essay', 98), (4, 'Borges and Magical Realism', 89); select * from students; select * from papers; |
-- 첫번째 문제
select s.first_name, p.title, p.grade from students s join papers p on s.id = p.student_id order by p.grade desc; |
-- 두번째 문제
select s.first_name, p.title, p.grade from students s left join papers p on s.id = p.student_id; |
-- 세번째 문제
select s.first_name, ifnull(p.title,'MISSING') as title, ifnull(p.grade,0) as grade from students s left join papers p on s.id = p.student_id; |
-- 네번째 문제
select s.first_name, ifnull(avg(grade),0) as average from students s left join papers p on s.id = p.student_id group by s.first_name order by avg(grade) desc; |
-- 다섯번째
select s.first_name, ifnull(avg(grade),0) as average , if(avg(p.grade)>70,'PASSING','FALING') as passing_status -- select문의 같은 레벨에서는 as 뒤의 타이틀이 적용되지 않는다. from students s left join papers p on s.id = p.student_id group by s.first_name order by average desc; |
ㄴ select문의 같은 레벨에서는 as 뒤의 타이틀이 적용되지 않는다
반응형
'프로그래밍 언어 > MySQL' 카테고리의 다른 글
RDBMS와 NoSQL 간단 설명 1 (0) | 2022.05.18 |
---|---|
[MySQL] 多대多관계, null인 데이터를 가져오는 법 (0) | 2022.05.18 |
[MySQL] 관계형 데이터베이스 합치기: join, left join (0) | 2022.05.17 |
[MySQL] Foreign key 생성 (0) | 2022.05.17 |
[MySQL] if() 함수, ifnull() 함수 , 실습 풀이 (0) | 2022.05.17 |