오라클 COUNT 조건 여러개 - olakeul COUNT jogeon yeoleogae

반응형

오라클 COUNT 조건 여러개 - olakeul COUNT jogeon yeoleogae

EX) A테이블, B테이블, C테이블 , D테이블 의 ROW수를 얻어오는 문법입니다. 사실 SELECT COUNT(*) FROM A테이블 이런식으로 작성해도 되지만 조금 더 편리한 방법입니다. 효율적이지는 않지만 가끔 쓰일꺼같아 정리차원에서 게시글을 작성합니다. 

SELECT 
(SELECT COUNT(*) FROM A테이블)A,
(SELECT COUNT(*) FROM B테이블)B, 
(SELECT COUNT(*) FROM C테이블)C,
(SELECT COUNT(*) FROM D테이블)D,
(SELECT COUNT(*) FROM E테이블)E,
(SELECT COUNT(*) FROM F테이블)F,
(SELECT COUNT(*) FROM G테이블)G,
(SELECT COUNT(*) FROM H테이블)H,
(SELECT COUNT(*) FROM I테이블)I,
(SELECT COUNT(*) FROM J테이블)J
FROM DUAL;

반응형

저작자표시비영리동일조건

'Oracle' 카테고리의 다른 글

Oracle 관리자 계정 삭제 방법 (ORA-28014)  (1) 2021.10.08
ORA-65096 invalid common user or role name 해결방법  (0) 2021.10.06
[Oracle] 쿼리 실행속도 측정방법  (0) 2021.09.01
[Oracle]ORA-00054: 자원이 사용중이고, NOWAIT가 지정되어 있습니다. 해결방법  (8) 2021.08.31
[Oracle]DB에서 insert for문 작성  (0) 2021.08.31

Query문을 작성하며 원하는 결과가 포함된 

데이터의 개수를 구하기 위해

COUNT()를 사용하곤 합니다.

그런데, 예를 들어봅시다.

오라클 COUNT 조건 여러개 - olakeul COUNT jogeon yeoleogae

이와 같은 Table이 있는데,

해당 Table의 전체 개수와 

Age가 10대인 데이터의 개수만을 구하기 위해서는

어떻게 해야할까요??

물론, 쿼리를 두번 날릴 수 있지만,

성능을 위해 한번에 처리하는 것이 좋을 것입니다.

(물론, 저정도 양이라면... 이런 고민 조차가...)

1

SELECT COUNT(*), COUNT(IF(age > 20, age, NULL)) FROM info_table;

cs

이와 같이 전체 데이터의 개수와,

IF문을 사용하여 age가 10대인 데이터의 개수를

한 Query에서 동시에 구할 수 있습니다.

예... 그렇습니다.

굳~ 

오라클 COUNT 조건 여러개 - olakeul COUNT jogeon yeoleogae

저작자표시비영리변경금지

'삽질의 현장 > - DataBase' 카테고리의 다른 글

[삽잡이::DB] Query Analyzer  (0) 2016.10.05
[삽잡이::DB] Index를 타라~  (0) 2016.10.05
[삽잡이::sql]mysql 테이블을 가지고 놀자! ALTER TABLE  (0) 2016.07.13
[삽잡이::sql] CASE WHEN THEN WHEN THEN ELSE END !?  (0) 2016.07.02
[삽잡이::sql]count() 와 IF() 사용 주의사항! 이라 쓰고 삽질이라 읽는다  (0) 2016.06.28

오라클 COUNT 조건 여러개 - olakeul COUNT jogeon yeoleogae

COUNT CASE, COUNT DISTINCT

조건에 따른 카운트 및 중복을 제거한 카운트를 세보자

COUNT CASE (조건 카운트)

특정 조건에 해당하는 행의 카운트를 세보자

SELECT COUNT(CASE WHEN 조건 THEN 1 END)
FROM 테이블

조건에 일치할 경우 카운트하고, 일치하지 않을 경우 카운트하지 않는다.

예제. 반별 학생 수 카운트

반을 기준으로 반별로 학생의 수를 카운트해보자

WITH TABLE1 (반, 이름) AS
(
	SELECT 1, '꽁쥐'
	UNION ALL SELECT 1, '박사'
	UNION ALL SELECT 2, '찌우'
	UNION ALL SELECT 2, '소태'
	UNION ALL SELECT 2, '소희'
	UNION ALL SELECT 3, '현정'
	UNION ALL SELECT 3, '태희'
)
SELECT  COUNT(CASE WHEN 반=1 THEN 1 END) AS '1반',
	COUNT(CASE WHEN 반=2 THEN 1 END) AS '2반',
	COUNT(CASE WHEN 반=3 THEN 1 END) AS '3반'
FROM TABLE1
원본 데이터
오라클 COUNT 조건 여러개 - olakeul COUNT jogeon yeoleogae
결과 데이터

1반에 해당하는 '꽁쥐','박사' -> 2명

2반에 해당하는 '찌우', '소태', '소희' -> 3명

3반에 해당하는 '현정', '태희' -> 2명

의 결과를 가져온다.

위와 같은 경우는 COUNT CASE가 아니라 간단히 GROUP BY를 사용해서 표현할수도 있다.

WITH TABLE1 (반, 이름) AS
(
	SELECT 1, '꽁쥐'
	UNION ALL SELECT 1, '박사'
	UNION ALL SELECT 2, '찌우'
	UNION ALL SELECT 2, '소태'
	UNION ALL SELECT 2, '소희'
	UNION ALL SELECT 3, '현정'
	UNION ALL SELECT 3, '태희'
)
SELECT 반, COUNT(*) AS ' 카운트'
FROM TABLE1
GROUP BY 반
결과 데이터

CASE DISTINCT (중복제거 카운트)

중복된 값을 제거하고 카운트해보자

SELECT COUNT(DISTINCT 컬럼명)
FROM 테이블

값의 중복이 있을 경우 중복을 제거하여 무조건 하나로 카운트한다.

예제. 중복을 제거한 반별 학생 수 카운트

학생 수를 반별로 카운트하되, 중복을 제거하고 카운트해보자

WITH TABLE1(반, 이름) AS (
	SELECT 1, '꽁쥐' UNION ALL
	SELECT 1, '꽁쥐' UNION ALL
	SELECT 1, '꽁쥐' UNION ALL
	SELECT 2, '소태' UNION ALL
	SELECT 2, '룰라' UNION ALL
	SELECT 3, '소희' UNION ALL
	SELECT 3, '소희'
)
SELECT 반
	, COUNT(*) AS '중복포함'
	, COUNT(DISTINCT 이름) AS '중복제거'
FROM TABLE1
GROUP BY 반
원본 데이터결과 데이터

1반의 꽁쥐의 데이터는 3개가 있다. COUNT(*) -> 3

하지만, DISTINCT로 중복을 제거하면 하나로 카운트한다. COUNT(DISTINCT 이름) -> 1

[MSSQL] GROUP BY 없이 컬럼과 함께 COUNT를 조회해보자 (COUNT OVER)
[MSSQL] COUNT(*) COUNT(1), COUNT(컬럼명)
[MSSQL] DISTINCT, GROUP BY 비교