안녕하세요
제목 그대로
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() 버튼을 클릭하여 작성 하시면 됩니다.