전체 카운트와 부분 카운트 1 4 3,433

by 커피요쿠르트d [SQLServer] count 카운트 전체 윈도우 sql server [2014.07.25 10:47:05]


수고하십니다. 

 

궁금한게 있어 질문드립니다. 

아 현재 사용하고 있는 db는 sql server 2005입니다

한 쿼리에서 전체 row 카운트와 일부 row 카운트를 함께 해오고 싶습니다. 될까요?

 

-

with test as (
select 1 as id , '1' as value union all
select 2 as id , '2' as value union all
select 3 as id , '2' as value union all
select 4 as id , '2' as value
)
select
 (select count(1) from test where value = '2') as cnt2all ,
(select count(1) from test where value = '2' and id <3 ) as cnt2Partition

-

위 쿼리는 value='2' 인 row의 count와 , value='2'인 애들 중에서 id < 3  인 경우만 따로 카운트해서 가져오는데요.

요걸 한번에 어떻게 되나 싶어서 질문드립니다. 

안되요.. 라는 댓글도 좋아요.. ㅋ

 

아.. 버전문제로.. 윈도우 함수 사용에 제약이 있네요. 

sql server에서는 over절이라 하나보네요. (PRECEDING, UNBOUNDED PRECEDING ...)

sql server 2012부터 지원되나봐요.. ㅜㅜ

생각해보니 전체 카운트는 아니네요;;

쿨럭..

 

 

 

by 우리집아찌 [2014.07.25 11:21:26]
select count(case when value='2' then 1 end ) cnt1
      ,count(case when value='2' and id <3  then 1 end ) cnt1

from 
(
select 1 as id , '1' as value union all
select 2 as id , '2' as value union all
select 3 as id , '2' as value union all
select 4 as id , '2' as value ) a

 


by 커피요쿠르트d [2014.07.26 18:17:03]

답변 정말 감사드립니다. 

넘 어렵게만 생각했네요. ㅠㅠ

이게. 습관적으로 마농님 아이디에 채택을 클릭해서.. ㅠㅠ
정말 죄송합니다. .. ㅠㅠ


by 마농 [2014.07.25 11:29:29]
-- 공통 조건은 Where 절로
-- 부분 조건은 Case 문으로
SELECT COUNT(*) cnt2all
     , COUNT(CASE WHEN id < 3 THEN 1 END) cnt2Partition
  FROM test
 WHERE value = '2'
;

 


by 커피요쿠르트d [2014.07.26 18:15:11]

답변 정말 감사드립니다!!

어렵게만 생각한 제가 한심하네용. ㅋㅋ ㅜㅜ

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입