데이터베이스

오라클 COUNT, 널(NULL), 공백 SQL 질의

스윙스윙 2021. 9. 9. 22:53

▣ 오라클 COUNT, 널(NULL), 공백 SQL 질의

집계함수 설명
COUNT(*) NULL 값을 포함한 행의 수
COUNT(표현식) 표현식의 NULL 값을 제외한 행의 수
SUM( [DISTINCT | ALL] 표현식) 표현식의 NULL 값을 제외한 합계
AVG( [DISTINCT | ALL] 표현식} 표현식의 NULL 값을 제외한 평균
MAX( DISTINCT | ALL] 표현식) 표현식의 최대값
MIN( DISTINCT | ALL] 표현식) 표현식의 최소값

* DISTINCT : 같은 값을 하나의 데이터로 간주할 때 사용하는 옵션(중복제거)

 

 

 


2013년 54번

정답 : 4번

1) 해당되지 않는 값

2) 의도적으로 유보한 값

3) 알 수 없는 값

4) 모르는 값이 아닌 0

0은 널이 아님

 


 

2021년 54번

정답 : 4번

가. 중복되는 값이 있으면, COUNT(속성명) ≠ COUNT(DISTINCT 속성명) -> DISTINCT 중복값을 제거하고 계산(틀림)

나. 중복되는 값이 없는 속성의 경우, COUNT(*) = or ≠ COUNT(속성명) -> NULL 값이 존재하지 않으면 같음(틀림)

다. COUNT(*)은 모든 투플을 카운트 하기 때문에 NULL도 포함 -> 맞음

라. COUTN(*)은 중복되는 투플도 포함함 -> 맞음


2021년 60번

정답 : 4번

 

가. SELECT 학과 FROM 학생;

  -> WHERE절이 없고, DISTINCT 문도 없으므로 전체 레코드 출력 60 + 40 + 30 + 10 = 140건

나. SELECT DISTINCT 학과 FROM 학생;

  -> 학과 속성의 중복을 제거했으므로, { 수학, 화학, 물리, NULL } 총 4건

다. SELECT COUNT(*) FROM 학생 GROUP BY 학과;

  -> 학과 기준 GROUP BY 했으므로, { 60, 40, 30, 10 } 4건 반환

 

가 140, 나 4, 다 4 정답 4번

 


2017년 58번

정답 : 1번

COUNT(*) as X : 전체 row의 개수를 의미하므로 B컬럼의 Null 값에 무관하게 6개 

COUNT(B) as Y : 컬럼B의 개수를 의미하므로 B의 Null값을 제외한 4개

COUNT(CASE WHEN B IS NOT NULL AND LEN(LTRIM(B)) = 0 THEN '1' END) AS Z
B 컬럼이 Null 값이 아니고 공백을 제외한 TRIM 길이 LENGTH가 0 이면 1 개씩 카운트 하므로
여기에 해당되는 조건은 A가 2, B 가 ' ' 인 row 1 개
즉 X=6, Y=4, Z=1
SELECT X, X-Y, Z 결과는 6, 2, 1

 

------------------------------------------------------------------
-- 2017년 정보시스템감리사 DB 58번 SQL

DROP TABLE TEST;
CREATE TABLE TEST(A NUMBER, B VARCHAR(10));
INSERT INTO TEST VALUES (1, 'kim');
INSERT INTO TEST VALUES (2, ' '); --(공백)
INSERT INTO TEST VALUES (3, NULL);
INSERT INTO TEST VALUES (4, 'park');
INSERT INTO TEST VALUES (5, NULL);
INSERT INTO TEST VALUES (6, 'lee');

SELECT * FROM TEST;



SELECT X, X-Y, Z
FROM (SELECT COUNT(*) AS X, COUNT(B) AS Y,
COUNT(CASE WHEN B IS NOT NULL AND LTRIM(B) IS NULL 
THEN '1' END) AS Z
  FROM TEST) T;

 

 


* 서브쿼리 체크

SELECT COUNT(*) AS X, COUNT(B) AS Y,
COUNT(CASE WHEN B IS NOT NULL AND LTRIM(B) IS NULL 
THEN '1' END) AS Z
  FROM TEST;