一、创建表并插入数据
create
table
TestResults
(
test_name
char
(
20
)
not
null,
test_step
integer
not
null,
comp_date
date
,
primary
key
(
test_name
,
test_step
))
insert
into
TestResults
(
test_name
,
test_step
,
comp_date
)
values
(
'Reading Skills'
,
1
,
'2017-1-5'
),
(
'Reading Skills'
,
2
,
'2017-1-8'
),
(
'Reading Skills'
,
3
,
'2017-1-6'
),
(
'Reading Skills'
,
4
,
'2017-1-4'
),
(
'Math Skills'
,
1
,null),
(
'Math Skills'
,
2
,null),
(
'Math Skills'
,
3
,null),
(
'Language Skills'
,
1
,null),
(
'Language Skills'
,
2
,null),
(
'Language Skills'
,
3
,null),
(
'Language Skills'
,
4
,null),
(
'Language Skills'
,
5
,
'2017-1-2'
)
二、查询数据
1、解惑一
select
distinct
test_name
from
TestResults
as
t1
where
not
exists
(
select
*
from
TestResults
as
t2
where
t1
.
test_name
=
t2
.
test_name
and
t2
.
comp_date
is
null)
2、解惑二(很巧妙,count(*)计算包含null的数据,count(*)计算日期的次数)
select
test_name
from
TestResults
group
by
test_name
having
COUNT
(*)
=
COUNT
(
comp_date
)
3、解惑三
select
test_name
,
COUNT
(*)
as
test_steps_needed
,
(
COUNT
(*)
-
COUNT
(
comp_date
))
as
test_steps_missing
from
TestResults
group
by
test_name
having
COUNT
(*)
<>
COUNT
(
comp_date
)
4、自己的写法
select
distinct
t2
.
test_name
from
TestResults
as
t2
where
test_name
not
in
(
select
distinct
t1
.
test_name
from
TestResults
as
t1
where
t1
.
comp_date
is
null
group
by
t1
.
test_name
)