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

できます; ただし、testfreq> 0 の AVG と STDEV をフィルター処理する必要がありますが、count(*) をフィルター処理しない必要があります。

最も近いものは次のとおりです。

  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

ご指導ありがとうございました!

4

1 に答える 1

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
于 2012-12-05T20:29:17.213 に答える