Data Analysis/혼공SQL

[혼공SQL] 3-2. SELECT

알밤바 2022. 5. 18. 08:21
728x90
반응형

본 포스팅은 '한빛출판네트워크'의 '혼공SQL' 책을 기반으로 작성한 포스팅입니다.

1. ORDER BY 절

  • 순서 정렬
  • 기본 값은 ASC (오름차순)
select mem_id, mem_name, debut_date from member
order by debut_date;

 

  • DESC 추가하면 내림차순
select mem_id, mem_name, debut_date from member
order by debut_date DESC;

 

  • ORDER BY절은 WHERE 절 다음에 나와야 한다. (그렇지 않으면 오류 발생)
select mem_id, mem_name, debut_date, height from member
where height >= 164
order by height DESC;

 

  • 정렬 기준을 여러 개 열로 지정할 수 있음
select mem_id, mem_name, debut_date, height from member
where height >= 164
order by height DESC, debut_date ASC;

 

1.1 LIMIT

  • LIMIT는 출력하는 개수를 제한함
  • 형식 : LIMIT 시작, 개수 = LIMIT 개수 OFFSET 시작
  • LIMIT는 첫 데이터를 0번으로 설정하여 시작함
select * from member
limit 3;

 

📌 데뷔일자(debut_date)가 빠른 회원 3건만 추출하기

→ order by를 함께 사용

select mem_name, debut_date from member
order by debut_date
limit 3;

 

📌 평균 키(height)가 4~5번째로 큰 회원 추출하기

select mem_name, height from member
order by height desc
limit 3, 2;           -- 3번째부터 2건 조회

 

1.2 DISTINCT

  • 조회된 결과에서 중복된 데이터를 1개만 남김
  • 열 이름 앞에 DISTINCT를 써주면 됨
select distinct addr from member;

 

2. GROUP BY 절

그룹으로 묶어주는 역할을 함

 

2.1 집계 함수

  • GROUP BY와 함께 주로 사용됨
함수명 설명
SUM() 합계
AVG() 평균
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수
COUNT(DISTINCT) 고유한 행의 개수 (중복은 1개만 인정)

 

📌 각 회원(mem_id) 별로 구매한 개수(amount)를 합쳐서 출력하기

→ 집계함수 SUM()과 GROUP BY 절을 사용

select mem_id, sum(amount) from buy 
group by mem_id;

 

  • **별칭(alias)**을 사용해보자
select mem_id '회원 아이디', sum(amount) '총 구매 개수' from buy
group by mem_id;

 

📌 회원이 구매한 금액의 총합을 출력하기

select mem_id '회원 아이디', sum(price*amount) '총 구매 금액' from buy
group by mem_id;

 

📌 전체 회원이 구매한 물품 개수(amount)의 평균 구하기

select avg(amount) '평균 구매 개수' from buy;

 

📌 회원 별 구매한 물품 개수의 평균 구하기

select mem_id, avg(amount) '평균 구매 개수' from buy
group by mem_id;

 

📌 회원 테이블에서 연락처가 있는 회원의 수를 카운트하기

select count(phone1) '연락처가 있는 회원' from member;

  • COUNT(*)는 모든 행의 개수를 카운트함
  • COUNT(열_이름)은 열 이름의 값이 NULL인 것을 제외한 행의 개수를 카운트함

 

2.2 Having 절

  • WHERE 절에는 집계 함수를 사용할 수 없음 → 이 때 HAVING 절을 활용하기
  • group by와 관련된 조건절은 HAVING을 활용해야 함

 

📌 총 구매 금액이 1000 이상인 회원 출력하기

select mem_id '회원 아이디', sum(price*amount) '총 구매 금액' from buy
group by mem_id
having sum(price*amount) > 1000;

 

📌 총 구매 금액이 큰 사용자부터 출력하기

→ order by 사용하기

select mem_id '회원 아이디', sum(price*amount) '총 구매 금액' from buy
group by mem_id
having sum(price*amount) > 1000
order by sum(price*amount) desc;

728x90
반응형