2012-12-05 45 views
0

这里是我的查询在同一个查询选择不同的过滤器聚集

SELECT 
    client_id, 
    TimesTested, 
    CAST(COUNT(*) AS varchar(30)) AS count, 
    CAST(AVG(testfreq) as varchar(30)) as TestFreq, 
    CAST(STDEV(TestFreq) as varchar(30)) Stdv 
    FROM counted 
    GROUP BY 
    client_id, 
    TimesTested 

它的工作原理;然而,我需要筛选AVG和STDEV,其中testfreq> 0,但我需要计数(*)不被过滤。

最接近的事是:

SELECT 
    client_id, 
    TimesTested, 
    CAST(COUNT(*) AS varchar(30)) AS count, 
    CAST(AVG(testfreq) as varchar(30)) as TestFreq, 
    CAST(STDEV(TestFreq) as varchar(30)) Stdv 
    FROM counted 
    where testfreq>0 --however I don't want this filtered applied to count(*) 
    GROUP BY 
    client_id, 
    TimesTested 

非常感谢您的指导!

+0

你为什么要转换的结果字符串?什么是'testfreq'的类型? –

回答

2

您应该能够使用CASE语句进行汇总与此类似:

SELECT client_id, 
    TimesTested, 
    CAST(COUNT(*) AS varchar(30)) AS count, 
    CAST(AVG(case when testfreq>0 then testfreq end) as varchar(30)) as TestFreq, 
    CAST(STDEV(case when testfreq>0 then TestFreq end) as varchar(30)) Stdv 
FROM counted 
GROUP BY client_id, TimesTested 

我不知道为什么你需要这些为VARCHAR处理,有没有你需要这些值转换为varchar理由吗?

我只想离开这个值是:

SELECT client_id, 
    TimesTested, 
    COUNT(*) AS count, 
    AVG(case when testfreq>0 then testfreq end) as TestFreq, 
    STDEV(case when testfreq>0 then TestFreq end) Stdv 
FROM counted 
GROUP BY client_id, TimesTested 
+0

非常感谢你错过了一些THENs? –

+0

固定,请参阅我的编辑 – Taryn

相关问题