나는 테이블이있다
create table us
(
a number
);
이제 다음과 같은 데이터가 있습니다.
a
1
2
3
4
null
null
null
8
9
지금은 널 (null) 카운트 단일 쿼리가 필요 하고 열 A하지 null 값을
답변
이것은 Oracle 및 SQL Server에서 작동합니다 (다른 RDBMS에서 작동하도록 할 수 있음).
select sum(case when a is null then 1 else 0 end) count_nulls
, count(a) count_not_nulls
from us;
또는:
select count(*) - count(a), count(a) from us;
답변
올바르게 이해하면 열에서 모든 NULL과 NOT NULL을 모두 계산하려고합니다 …
그것이 맞다면 :
SELECT count(*) FROM us WHERE a IS NULL
UNION ALL
SELECT count(*) FROM us WHERE a IS NOT NULL
주석을 읽은 후 전체 쿼리를 갖도록 편집했습니다.]
SELECT COUNT(*), 'null_tally' AS narrative
FROM us
WHERE a IS NULL
UNION
SELECT COUNT(*), 'not_null_tally' AS narrative
FROM us
WHERE a IS NOT NULL;
답변
Oracle에서 작동하는 빠르고 더러운 버전은 다음과 같습니다.
select sum(case a when null then 1 else 0) "Null values",
sum(case a when null then 0 else 1) "Non-null values"
from us
답변
쿼리를 이해 했으므로이 스크립트를 실행하고 Total Null, Total NotNull 행,
select count(*) - count(a) as 'Null', count(a) as 'Not Null' from us;
답변
널이 아닌 경우
select count(a)
from us
널용
select count(*)
from us
minus
select count(a)
from us
그 후
SELECT COUNT(A) NOT_NULLS
FROM US
UNION
SELECT COUNT(*) - COUNT(A) NULLS
FROM US
일을해야한다
열 제목이 올바르게 나옵니다.
SELECT COUNT(A) NOT_NULL, COUNT(*) - COUNT(A) NULLS
FROM US
내 시스템에 대한 일부 테스트에서는 전체 테이블 스캔 비용이 발생합니다.
답변
보통 나는이 트릭을 사용
select sum(case when a is null then 0 else 1 end) as count_notnull,
sum(case when a is null then 1 else 0 end) as count_null
from tab
group by a
답변
또 다른 대안을 제공하기 위해 Postgres 9.4+ 는 FILTER
집합체에 a 를 적용 할 수 있습니다 .
SELECT
COUNT(*) FILTER (WHERE a IS NULL) count_nulls,
COUNT(*) FILTER (WHERE a IS NOT NULL) count_not_nulls
FROM us;
SQLFiddle : http://sqlfiddle.com/#!17/80a24/5