2012-06-02 155 views
1

目前,我有这个COUNT和WHERE语句查询

SELECT 
    COUNT (enrollment_id) AS enrollments, 
    COUNT (result) AS 
    MAX (result) AS highest_result, 
    AVG (result) AS average_result, 
    MIN (period_code) AS earliest_enrollment  
FROM 
    enrollment 
WHERE 
result IS NULL 

我想已经是招生的总人数,这是什么COUNT(enrollment_id)是。然后我想要计算结果列中NULL值的数量,以获得unfinalised_enrollments的列。

底部的WHERE子句是否会影响使用结果列的其他SELECT语句?如果是的话,我该如何做到这一点,以便我可以只计算结果列中NULL值的数量,并将其显示在名为unfinalised_enrollment的列中。

在此先感谢。

+1

只需执行2个查询。绝对没有理由尝试在一个查询中适合所有内容 – zerkms

+0

这实际上是一个问题,其中一个查询必须包含这两个查询才能将其显示为一个表。我几乎得到了一切,这只是一个小小的呃逆。 – LewisFletch

+0

如果你愿意 - 你可以使用像SUM(result IS NULL)这样的东西 - 这会计算空值的数量 – zerkms

回答

2

可以使用SUM代替COUNT

SELECT 
    COUNT (enrollment_id) AS enrollments, 
    SUM (CASE WHEN result IS NULL THEN 1 ELSE 0 END) AS null_results, 
    MAX (result) AS highest_result, 
    AVG (result) AS average_result, 
    MIN (period_code) AS earliest_enrollment  
FROM enrollment  
+0

1.'COUNT'和'MIN(period_code)'结果可能会受到影响(很有可能)2. AVG (结果)' - 它也会受到影响吗? (还没有试图执行'AVG'为空包含值) – zerkms

+0

这适用于oracle,但如何将sql server 2008作为问题呢? – shareef

+0

@shareef:'CASE'是ANSI SQL操作符 – zerkms

0

这应该做到你在找什么:

SELECT 
    COUNT (enrollment_id) AS enrollments, 
    (SELECT COUNT (result) FROM enrollment WHERE result IS NULL) AS unfinalised_enrollment, 
    MAX (result) AS highest_result, 
    AVG (result) AS average_result, 
    MIN (period_code) AS earliest_enrollment  
FROM 
    enrollment; 
0

你可以使用:

SELECT 
    COUNT (enrollment_id) AS enrollments, 
    Count(*) - Count(result) AS null_results, 
    MAX (result) AS highest_result, 
    AVG (result) AS average_result, 
    MIN (period_code) AS earliest_enrollment  
FROM enrollment 

Count(*)将计总行数,Count(结果)enter code here将计算结果不为空的总行数