'Group by'에 해당되는 글 3건

  1. 2013.10.09 SQL HAVING 구문 (2)
  2. 2013.10.08 SQL GROUP BY 구문
  3. 2013.08.12 SQL SELECT DISTINCT 구문 (2)

SQL HAVING 구문

SQL 2013. 10. 9. 19:23

 

 

안녕하세요!! 

이번 포스팅에서는 SQL HAVING 구문에 대해서 설명하겠습니다.

 

예전에 ERP 시스템을 만들때는 종종 사용한듯 한데 규모가 그다지 크지 않은 홈페이지를 구축할땐 거의 사용하지 않았습니다. 그래도 HAVING은 중요한 역할을 하는 녀석(?) 이기 때문에 알아두면 도움이 많이 될듯합니다.

 

HAVING 은 group by 에서 사용하는 조건구문 이라고 생각하면 됩니다. where 조건에서는 집계함수와 함께 사용할 수 없기 때문에 having 을 이용해야 합니다.

기본적으로 having 는 select ..... group by .... having... 으로 사용됩니다.

 

SELECT column_name1, function(column_name2)
FROM table_name
WHERE column_name1 = 'value'
GROUP BY column_name1
HAVING function(column_name1) = 'value';

// group by 구문에 조건을 걸기 위해 having을 사용하게 됩니다.

 

지금까지 설명이 조금 어려웠다면 이제 부터 하나의 테이블을 예를들어 설명해보겠습니다.(group by 에 대한 내용은 바로 전 포스팅을 해놓았으니 참조하시기 바랍니다.)

 

이전 포스팅의 테이블을 이용하여 진행해보겠습니다.

 id

 coffee_name

 price

 guest

 1

 아메리카노

 2500

 김

 2

 카페라떼

 3000

 박

 3

 아메리카노

 2500

 이

 4

 카페모카

 3500

 송

// 테이블 이름은 coffee 라고 정의하겠습니다. 

group by 구문의 경우

select coffee_name, SUM(price) as total_price from coffee group by coffee_name;

// 처럼 사용했었죠. 위의 결과값은

coffee_name

 total_price

 아메리카노

 5000

 카페라떼

 3000

 카페모카

 3500

// 나오게 됩니다. 그럼 여기에서 한가지 더 조건을 걸어보겠습니다.

coffee_name 의 이름이 두 개 이상되는 값만 가져오려고 하려면 어떻게 해야 할까요? group by 를 하면 위 결과값처럼 그룹으로 묶어 버리기 때문에 몇 개가 얼마나 카운트 되었는지 사실 알 길이 없습니다. 이럴때 필요한게 바로 HAVING 입니다.

 

 

select coffee_name, SUM(price) as total_price from coffee group by coffee_name HAVING COUNT(coffee_name) > 1;

// 우선 having 을 적은 후 집계에 대한 조건을 걸 수 있습니다. 그래서 결과값중에서 1 보다 초과된 값만 가져오게 됩니다.

즉, 결과는 아래와 같이 나오게 됩니다.

coffee_name

 total_price

 아메리카노

 5000

 

지금까지 HAVING 에 대해서 설명드렸습니다. 간단하게 기본적인 내용을 적었지만 항상 응용을 해보셔야 스킬이 점점더 늘지 않을까 합니다. 다음 포스팅에서는 UCASE(), LCASE() 에 대해서 알아보겠습니다.

 

남은 하루 시간 알차게 보내시고 즐거운 프로그래밍 되세요!!

 

'SQL' 카테고리의 다른 글

SQL MID() 함수  (0) 2013.10.12
SQL UCASE(), LCASE() 구문  (0) 2013.10.10
SQL HAVING 구문  (2) 2013.10.09
SQL GROUP BY 구문  (0) 2013.10.08
SQL SUM() 함수  (1) 2013.10.07
SQL MAX(), MIN() 구문  (0) 2013.10.04
Posted by 진격의 파파

댓글을 달아 주세요

  1. midas6024 2014.02.03 18:13  댓글주소  수정/삭제  댓글쓰기

    좋은정보 감사합니다.

  2. 진격의 파파 2014.03.03 09:31 신고  댓글주소  수정/삭제  댓글쓰기

    도움되었다니 저도 감사드립니다. ^^

SQL GROUP BY 구문

SQL 2013. 10. 8. 15:32

 

 

안녕하세요!! 

이번에 포스팅할 내용은 SQL GROUP BY 구문입니다.

 

group by 구문은 하나 이상의 열을 기준으로 그룹을 묶어서 결과를 가져오는 집계함수 입니다.

쉽게 말하면 그룹단위로 묶어서 결과를 도출한다라고 생각하면 될듯합니다.

 

기본구문은 아래와 같습니다.

SELECT column_name, group_function(column_name)
FROM table_name
WHERE column_name =  'value'
GROUP BY column_name;

// 위처럼 group by 를 사용하여 column_name 에 대해서 그룹으로 묶습니다.

 

그냥 기본 구문을 보면 다소 분석하기 어렵지 않을까 싶어서 예제 테이블을 토대로 다시 알아보겠습니다.

음...요즘 커피숍이 많으니 커피를 기준으로 한번 예를들어 보겠습니다.

 

 id

 coffee_name

 price

 guest

 1

 아메리카노

 2500

 김

 2

 카페라떼

 3000

 박

 3

 아메리카노

 2500

 이

 4

 카페모카

 3500

 송

 

// 위와 같이 커피가 팔린 내용과 관련한 테이블이 있다치고 커피별로 얼마씩 팔렸는지 알아보기 위해 group by 를 이용하여 구문을 만들어보겠습니다.

 

select coffee_name, SUM(price) as total_price from coffee group by coffee_name;

// 위와 같은 구문을 실행하면 결과값은 아래와 같습니다. 

 coffee_name

 total_price

 아메리카노

 5000

 카페라떼

 3000

 카페모카

 3500

 

보통 group by 구문은 집계, 통계등에 많이 사용됩니다. 그래서 sql 구문에서 중요한 역할을 하게 됩니다. 우선 위 내용을 토대로 기본적인 구문을 익히시고 여러가지 상황을 직접 예제로 만들어서 해보는것도 공부에 좋은 방법이 될듯합니다. 

 

태풍이 오긴 오나 봅니다. 하루종일 비와 바람이 장난이 아닌듯 합니다. 아무쪼록 건강 유의하시고 즐거운 하루 보내세요!!

그리고 즐거운 프로그래밍 되시기 바랍니다.

 

'SQL' 카테고리의 다른 글

SQL UCASE(), LCASE() 구문  (0) 2013.10.10
SQL HAVING 구문  (2) 2013.10.09
SQL GROUP BY 구문  (0) 2013.10.08
SQL SUM() 함수  (1) 2013.10.07
SQL MAX(), MIN() 구문  (0) 2013.10.04
SQL COUNT 함수에 대해서  (4) 2013.10.02
Posted by 진격의 파파

댓글을 달아 주세요

SQL SELECT DISTINCT 구문

SQL 2013. 8. 12. 09:44

 

 

SQL 구문에서 중복된 값을 배제하고 고유의 값을 가져오고 싶을 경우 Distinct 를 사용합니다.  이와 비슷한 의미로 Group by 구문이 있는데 간단하게 예제 구문만 비교하고 추후 포스팅에서 설명하기로 하겠습니다.  

 

데이터베이스에 데이터를 저장하다 보면 중복되는 값이 종종 들어갑니다. 예를들어 회원의 정보를 입력받고 저장되는 구문을 프로그래밍 할 경우 이름의 중복이 있을수도 있고, 나이의 중복이 있을수도 있습니다. 그외 여러가지 경우가 있는데 그럴때 중복된 데이터를 배제하고 데이터를 가져오고 싶을경우

select DISTINCT name from member;

위 처럼 데이터베이스에 명령을 하면 됩니다.

위의 명령을 아래의 "member" 테이블에 적용시키면

 id

 user_id

 user_pwd

 name

 age

 phone

 email

 1

 test1

 1111

 홍길동

 25

 010-1111-1111

 test1@test.com

 2

 test2

 2222

 임꺽정

 45

 010-2222-2222

 test2@test.com 

 3

 test3

 3333

 이철수

 34

 010-3333-3333

 test3@test.com

 4

 test4

 4444

 김영희

 28

 010-4444-4444

 test4@test.com

 5

 test5

 5555

 이철수

 34

 010-5555-5555

 test5@test.com

 6

 test6

 6666

 김영희

 54

 010-6666-6666

 test6@test.com

 7

 test7

 7777

 이순신

 32

 010-7777-7777

 test7@test.com

 8

 test8

 8888

 이해신

 23

 010-8888-8888

 test8@test.com

 9

 test9

 9999

 박찬호

 39

 010-9999-9999

 test9@test.com

 

김영희

박찬호

이순신

이철수

이해신

임꺽정

홍길동

처럼 중복된 이철수, 김영희를 제외하면서 한명으로 인식하고 출력됩니다.

 

 

위에서 group by 에 관해 잠깐 설명했었는데 group by 의 경우

select name from member group by name asc;

select name from member group by name desc;

group 말 그대로 그룹을 지어라는 의미입니다. 그래서 그룹끼리 묶이게 되는 것이죠. 그리고 asc, desc (내림차순, 오름차순) 는 정렬을 어떻게 할지에 대한 구문입니다. 이 부분도 추후 더 상세히 포스팅하겠습니다.

어쨋든 Distinct는 중복을 제거하고 고유한 값만 가져오는 함수이며,

Group by 는 그룹을 지어서 가져오는 함수 입니다. 우선 여기까지만 설명하고 추후 Group by 포스팅에서 더 상세히 설명하겠습니다.

'SQL' 카테고리의 다른 글

SQL AND OR 구문  (0) 2013.08.14
SQL WHERE 구문  (0) 2013.08.13
SQL SELECT DISTINCT 구문  (2) 2013.08.12
SQL Select 구문  (0) 2013.08.09
SQL 기본 구문  (0) 2013.08.08
SQL 소개  (0) 2013.08.07
Posted by 진격의 파파

댓글을 달아 주세요

  1. 작가 남시언 2013.08.12 18:51 신고  댓글주소  수정/삭제  댓글쓰기

    앗! 좋은 정보!ㅎㅎㅎ