2012-12-06 2 views
1

다음 SQL 문에서 한 행 대신 올바른 수의 여러 행을 반환하는 이유는 무엇입니까?여러 집계 함수에서 선택 출력은 여러 행을 반환합니다.

SELECT 
    (
    SELECT COUNT(*) FROM schema.table t WHERE t.column IS NULL 
) AS t_Inserts, 
    (
    SELECT COUNT(*) FROM schema.table t WHERE t.column IS NOT NULL 
) AS t_Updates 
FROM 
    schema.table t; 

참고 : Oracle을 사용하고 있습니다.

Output: 
t_Inserts,t_Updates 
100,200 
100,200 
100,200 
100,200 
100,200 
... 

답변

1

당신이 게시 된 쿼리는 schema.table의 모든 행에 대해 한 번 t_Inserts 하위 쿼리 (그리고 t_Updates 하위 쿼리)를 실행합니다. schema.tableWHERE 절이 없으므로 결과 집합에 schema.table만큼 많은 행이 있어야합니다. 단일 행을 원한다면, 그것은 아마 대안 @ 저스틴의 대답에

SELECT SUM(CASE WHEN t.column IS NULL THEN 1 ELSE 0 END) t_inserts, 
     SUM(CASE WHEN t.column IS NOT NULL THEN 1 ELSE 0 END) t_updates 
    FROM schema.table t; 
1

같은 뭔가를하지만,보다 효율적인 것

SELECT 
    (
    SELECT COUNT(*) FROM schema.table t WHERE t.column IS NULL 
) AS t_Inserts, 
    (
    SELECT COUNT(*) FROM schema.table t WHERE t.column IS NOT NULL 
) AS t_Updates 
FROM 
    dual 

dual 테이블에서 SELECT 수 (+1) :

SELECT COUNT(*)-COUNT(column) AS t_Inserts, COUNT(column) AS t_Updates 
FROM schema.table; 
관련 문제