database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40699 게시물 읽기
No. 40699
조건부 count 쿼리 도와주세요
작성자
박용대(pydd)
작성일
2015-01-29 22:53
조회수
7,269

가맹점gano  카드번호card  금액amt
1  11   5000
1  11   7000
1  12   8000
1  12   4000
1  13   6000
2  21   5000
2  21   3000
2  22   6000
2  23   8000
2  24   4000
2  25   6000  

select gano
count(*),
count(distinct card),
sum(amt),
sum(case when amt >= 5000 then 1 else 0 end),
sum(case when amt >= 5000 then distinct card),
sum(case when amt >= 5000 then amt else 0 end)

from tmp

group by gano

빨간색 부분처럼 sum(case 부분에서 갯수를 세올때 중복되는 카드번호는 제거해서 가져오고싶습니다

고수님들 부탁드립니다.

이 글에 대한 댓글이 총 2건 있습니다.

-- 변경전 --
  sum(case when amt >= 5000 then 1 else 0 end),
  sum(case when amt >= 5000 then distinct card),
  sum(case when amt >= 5000 then amt else 0 end)
-- 변경후 --
  COUNT(CASE WHEN amt >= 5000 THEN 1 END),
  COUNT(DISTINCT CASE WHEN amt >= 5000 THEN card END),
  NVL(SUM(CASE WHEN amt >= 5000 THEN amt END), 0)
-- 설명 --
  - ELSE 0 은 빼는게 좋구요. 불필요한 연산을 줄입니다.
  - ELSE 0 을 빼면 SUM 대신 COUNT 를 사용할 수 있어 좋습니다.
  - DISTINCT 의 위치가 틀렸구요.

마농(manon94)님이 2015-01-30 10:51에 작성한 댓글입니다.

 글을 보는순간 제 무지함에 무릎을 탁 치고감니다...

마농님 항상감사합니다 덕분에 많이배우게 되네요

박용대(pydd)님이 2015-01-30 12:05에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40702DB로 날짜 검색 [3]
조성찬
2015-01-30
8567
40701oracle로 1차 연립방정식 풀기 [2]
김흥수
2015-01-30
8983
40700ID중복검사..를 하고싶은데요. 지적부탁드립니다. [2]
newbie
2015-01-30
8129
40699조건부 count 쿼리 도와주세요 [2]
박용대
2015-01-29
7269
40698쿼리를 자주 안쓰면 느리게 되는 걸 어떻게 막죠? [1]
김삼
2015-01-29
8488
40697fetch 속도가 너무 느립니다. 고속fetch 어떻게 하나요? [1]
신창식
2015-01-28
7918
40696컬럼 비교후 update 시키기 [2]
조선호
2015-01-28
7541
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다