select 절에서 group by 사용하지 않고 특정 중복된 컬럼 제외한 개수 가져오기.. 0 10 4,772

by 잔든건 [SQLServer] 중복제거 groupby count [2017.08.24 16:03:48]


안녕하세요 제목 그대로 select 절에서 여러 row들의 정보도 가져오면서 총 count도 조회하려는데 ***여기서 count시에 특정 중복되는 컬럼은 개수 1개로보고 카운트하려고 합니다. ex) 총 컬럼개수 : 209 나이별 총 컬럼개수 : 14 답변부탁드립니다~
by 마농 [2017.08.24 16:17:58]
SELECT deptno
     , COUNT(*) cnt
     , COUNT(DISTINCT job) job_cnt
  FROM emp
 GROUP BY deptno
;

 


by 잔든건 [2017.08.24 16:34:08]

group by를 쓰지않고서 입니당...


by jkson [2017.08.24 16:20:28]

select 절에서 여러 row들의 정보도 가져오면서 => 모든 컬럼을 다 보여주면서라는 의미인가요?

with t as
(
select '정보1' cd, '부가정보1' txt from dual union all
select '정보2' cd, '부가정보1' txt from dual union all
select '정보3' cd, '부가정보1' txt from dual
)
select cd, txt
     , count(1) over() "총row수"
     , count(distinct txt) over() "중복제거row수"
  from t

 


by 잔든건 [2017.08.24 16:33:56]

네 하지만 over()에는 distinct쓰면 에러가 나더라구요


by 잔든건 [2017.08.24 16:27:32]

네 over()에서는 distinct를 사용할 수 없더라구요 ㅜㅜ

제가 생각한 방법은

select Max(B.dd) over() as CNT

from

(select A.*,  dense_rank() over(order by A.COL2) as dd

from TableA  A)B

입니다... 성능에는 문제가 없을까요??

 


by jkson [2017.08.24 16:34:59]

아 sql 서버군요..

with t as
(
select '정보1' cd, '부가정보1' txt union all
select '정보2' cd, '부가정보2' txt union all
select '정보3' cd, '부가정보1' txt 
)
select cd, txt
     , count(1) over() as "총row수"
     , dense_rank() over(order by txt) + dense_rank() over(order by txt desc) - 1 as "중복제거row수"
  from t

 


by 잔든건 [2017.08.24 16:56:01]

감사합니다!


by jkson [2017.08.24 17:03:42]

아.. 성능.. 성능.. 성능이 좋을 것이라고 장담은 못하겠네요.

어쩌면 작성자님이 적어주신 게 더 빠를 것 같아요.

asc sort, desc sort 두번 하는 것 보다 작성자님 쿼리가 더 나을 수 있겠어요ㅠ

한번에 조회되는 row수가 많지 않다면 제가 적어드린 게 약간 쿼리가 간단해서 좋을 것 같은데

조회량이 많다면 작성자님 쿼리 그냥 쓰세요.


by 마농 [2017.08.24 17:11:31]

jkson 님 신기한 아이디어네요? ^^
개인적인 생각으로 목록 쿼리에 count 를 결합해 한번에 조회하는게 맞는가? 고민합니다.
목록은 목록대로, 카운트는 카운트 대로 따로 조회하는게 맞다고 생각합니다.


by jkson [2017.08.24 17:26:58]

dense가 중복 제거이고 위로 아래로 다 더하면 전체가 나올 거라 생각해서 했는데..

결론적으로 성능상 좋지도 않고 마농님 말씀대로 따로 빼는 게 더 나을 것 같아요ㅎㅎ;;

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