초보자들을 위한 팁(count편)

· 12년 전 · 4026 · 8

여기저기 SQL 관련 포럼을 다니다보면,
 아주 기본적인 통계산출 방법중에 하나인 count, sum 을 활용하지
 못하는 경우를 많이 봅니다....
 이럴 땐 정말 안타까운 마음이 들기도합니다.
 ..........................................
 저는 오라클을 문법으로 SQL을 작성합니다. (제가 오라클만 써봤기때문입니다.)
 가끔 QnA 에 Oracle 로 쉽게 구현이 되나 mySQL 로 구현이 안되는 부분을 많이
 접합니다....mySQL로 되는지 안되는지는 저도 알수없습니다...ㅡㅡ;;모르기때문에...
 하지만 sum() count() 와 같은 그룹함수, 또는 분석쿼리 등을 공부하다보면,
 반드시 그 해결책들을 찾으실수 있을겁니다.
 ..........................................
 
예제TABLE)
 table_A
+-----+---------------------+
 | ID | VALUE |
 +-----+---------------------+
 | 1 | 25 |
 | 2 | 30 |
 | 2 | 45 |
 | 4 | 45 |
 +-----+---------------------+
 
1) select count(1) from table_A;
이 구문은 table_A 의 레코드의 총 갯수를 구해줍니다.
따라서 결과는 4 가 될것입니다.
 
2) select id, count(1) from table_A group by id;
이 구문은 id를 기준으로 group 이 형성되고 그 그룹별 record 수를
 출력해줄것입니다.
따라서 결과는
--------
1 1
 2 2
 4 1
---------
같이 나옵니다.
 
3) select count(decode(id,2,1,null)) from table_A
이 구문으로서 우리는 count의 속성을 알수있습니다.
decode 는 값을 치환해주는 함수입니다. 위의 decode(id,2,1,null)
은... id 가 2의 값을 같는경우 1 의값을 리턴하고 아니면 null 을 리턴합니다.
마치 case when id=2 then 1 else null END 처럼 작동합니다.
count 를 빼면
---------------------
<null>
 1
 1
 <null>
---------------------
의 값이 리턴될것입니다.
거기에 count() 를 해주니 결과는 2가 나왔습니다.....
우리는 여기서 중요한 카운트의 속성을 알수있습니다.....
 <strong>count () 는 null 이 아닌 것을 센다</strong>는 겁니다......
이것은 매우 중요한 정보입니다.
예를들어
 어떤 널값을 포함한 iii 라는 컬럼이 있다고 할때
 널값이 몇개인지 체크해줄때....초보님들은
select count(iii) from a_table where iii is null 과 같은
 말도안되는 무조건 0 나오는 쿼리를 만들어낼수도 있습니다.
그리고는 null인 값은 없었다! 라고 결말을 내는 치명적인 실수를 할지도
 모릅니다.
널값을 세려면 count(컬럼명) 처럼 하지말고 count(1) 이나 count(*) 처럼
 해야 옳습니다.....
아니면 제가 예를 든 decode 와 조합을 한다면 굳이 where 절을 쓰지 않아도
count 해낼것입니다.
select count(decode(iii, null, 1, null)) from a_table ; 처럼요..
위의 decode() 를 활용한다면, 우리는 보다 많은 통계를 처리할수있습니다.
 
4) select count(decode(id,1,1,null)),
 count(decode(id,2,1,null)),
 count(decode(id,3,1,null)),
 count(decode(id,4,1,null))
 from table_A
 3)번예제로 인해 우린 이 SQL이 무슨 의미를 갖는지 잘 압니다.
---+---+---+---+
1 2 0 1
----------------
처럼 출력될것입니다. row 단위로 출력되지 않고 하나의 row 에 각 컬럼으로
 값이 들어갔습니다....
이는 실무에서 아주 많이 나오는 형태의 쿼리입니다. 그룹함수와 decode를
 섞어서 우리는 아주 다양한 형태의 결과를 도출해낼수 있습니다.
 
결론)
 몇개 안되는 정보이지만, 초보님들에겐 어찌보면 매우 유용한 정보가 될수도 있겠습니다.
 count 는 바로 통계쿼리의 기초라고 볼수있습니다...
 SQL 이 발전함에 따라, 보다 많은 분석방법을 추가시키고, 다양한 쿼리로 발전되어갑니다.
 이를 적절히 활용할줄 안다면,,,, 자신의 프로그램 로직을 더욱 더 간결하고, 값어치를 올려줄 수도 있을겁니다....
 

다음번엔, SUM 에대해서 해보면서,
 간단한 통계 쿼리 부터를 복잡한 다차원 통계 분석까지
 작성하는 것으로 접근해 보도록 하겠습니다.

첨부파일

|

댓글 8개

좋은 글 잘 봤습니다~
잘봤읍니다 쉽게 설명 ㄳ
잘보고 갑니다.^^
잘보고 갑니다. ^^;
좋은 글이네요 ^^ 감사합니다.
댓글을 작성하시려면 로그인이 필요합니다. 로그인

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
12년 전 조회 1,140
12년 전 조회 1,457
12년 전 조회 1,836
12년 전 조회 1,265
12년 전 조회 549
12년 전 조회 1,742
12년 전 조회 1,365
12년 전 조회 7,655
12년 전 조회 2,230
12년 전 조회 2,013
12년 전 조회 2,073
12년 전 조회 2,516
12년 전 조회 614
12년 전 조회 3,744
12년 전 조회 1,402
12년 전 조회 6,449
12년 전 조회 1,043
12년 전 조회 1,018
12년 전 조회 1,277
12년 전 조회 702
12년 전 조회 3,121
12년 전 조회 1,447
12년 전 조회 1,524
12년 전 조회 1,028
12년 전 조회 2,660
12년 전 조회 1,684
12년 전 조회 483
12년 전 조회 3,543
12년 전 조회 1,050
12년 전 조회 850
12년 전 조회 1,241
12년 전 조회 5,599
12년 전 조회 1,222
12년 전 조회 2,845
12년 전 조회 2,293
12년 전 조회 512
12년 전 조회 2,974
12년 전 조회 1,419
12년 전 조회 1,330
12년 전 조회 1,385
12년 전 조회 3,308
12년 전 조회 2,082
12년 전 조회 3,736
12년 전 조회 8,617
12년 전 조회 4,216
12년 전 조회 3,785
12년 전 조회 1,398
12년 전 조회 1,473
12년 전 조회 3,182
12년 전 조회 4,027
12년 전 조회 4,420
12년 전 조회 1,643
12년 전 조회 1,330
12년 전 조회 916
12년 전 조회 1,018
12년 전 조회 2,755
12년 전 조회 2,769
12년 전 조회 1,290
12년 전 조회 2,830
12년 전 조회 1,319
12년 전 조회 8,494
12년 전 조회 1,541
12년 전 조회 3,806
12년 전 조회 6,422
12년 전 조회 1,605
12년 전 조회 2,869
12년 전 조회 624
12년 전 조회 1,334
12년 전 조회 1,188
12년 전 조회 1,356
12년 전 조회 3,347
12년 전 조회 1,120
12년 전 조회 1,851
12년 전 조회 1,290
12년 전 조회 938
12년 전 조회 1,424
12년 전 조회 2,133
12년 전 조회 1,419
12년 전 조회 1,302
12년 전 조회 1,824
12년 전 조회 1.5만
12년 전 조회 1,099
12년 전 조회 905
12년 전 조회 2,746
12년 전 조회 8,996
12년 전 조회 1,314
12년 전 조회 1,206
12년 전 조회 1,671
12년 전 조회 1,171
12년 전 조회 1,307
12년 전 조회 3,588
12년 전 조회 1,494
12년 전 조회 2,163
12년 전 조회 1,185
12년 전 조회 1,343
12년 전 조회 3,062
12년 전 조회 907
12년 전 조회 1,382
12년 전 조회 1,646
12년 전 조회 2,070
🐛 버그신고