본문 바로가기

카테고리 없음

ORDER BY(정렬), GROUP BY(그룹으로 묶어), HAVING(조건)

SELECT mem_id, mem_name, debut_date  
    FROM member 
    ORDER BY debut_date; -- 오름차순(작은 것부터 큰거로 감)

 

SELECT mem_id, mem_name, debut_date 
    FROM member 
    ORDER BY debut_date DESC; -- Descending (내림차순)

 

 

-순서: WHERE 다음에 ORDER BY가 와야 한다.

SELECT mem_id, mem_name, debut_date  
    FROM member 
    WHERE height >=164
    ORDER BY debut_date;

 

-정렬할때 정렬 조건을 여러개 줄 수도 있다.

SELECT mem_id, mem_name, debut_date,height 
    FROM member 
    WHERE height >=164
    ORDER BY height DESC, debut_date ASC; --- 키가 같을 경우, 데뷔날짜 기준으로 오름차순

 

-원하는 개수만 데이터 가져오기

SELECT * 
    FROM member
    LIMIT 3;

-데뷔날짜가 빠른 순서대로 세 팀만 보고 싶어

SELECT * 
    FROM member
    ORDER BY debut_date
    LIMIT 3;

 

-서로 다른 종류들을 중복없이 알고 싶을 때 ( DISTINCT)

1)모든 지역을 가져오는 구문

SELECT addr FROM member;

2)중복된 지역은 제거하고 서로다른 지역만 가져오는 구문
SELECT DISTINCT addr FROM member;

 

-GROUP BY가 필요한 상황: 각 그룹이 몇개씩 샀는지 알고 싶어

SELECT mem_id, amount FROM buy 
ORDER BY mem_id;

결과

SELECT mem_id, SUM(amount) FROM buy 
GROUP BY mem_id;

해석: 멤버 아이디 별로 몇개를 샀는지 SUM(합계)를 구하라

 

-가독성을 높이기 위해 별명 붙이기

SELECT mem_id "회원 아이디", SUM(amount) "총 구매개수" FROM buy 
GROUP BY mem_id;

 

-몇개 샀는지보다 중요한것은 얼마를 구매했는지

SELECT mem_id "회원 아이디", SUM(amount*price) "총 구매금액" FROM buy 
GROUP BY mem_id
ORDER BY SUM(amount*price) DESC;

 

[GROUP BY와 함께 사용되는 함수]

 

-COUNT함수는 행의 개수를 센다

SELECT COUNT(*) FROM member; -- 모든 회원의 수를 셈

 

-COUNT안에 열이름을 넣으면 'NULL'값을 빼고 센다

SELECT COUNT(phone1) "연락처가 있는 회원" FROM member;

 

-HAVING 조건식: GROUP BY에는 WHERE 조건식을 쓸 수 없다. 따라서 HAVING을 사용한다.

-회원중 구매금액이 1000만원을 넘는 회원만 가져오기

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 개수"
   FROM buy 
   GROUP BY mem_id
   HAVING  SUM(price*amount) > 1000;

 

-순서유의: SELECT, FROM, GROUP BY, HAVING, 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;