2017-06-21 3 views
0

条件を持つSQLにcount文を追加しようとしていますが、エラーが発生し続けます。以下は私のコードです:SQLでCOUNT文を追加する

SELECT 
    (100.0*(COUNT(CASE [TYPE] WHEN 500 THEN 1 ELSE NULL END))/(100* 
    (COUNT(CASE [TYPE] WHEN 400 THEN 1 ELSE NULL END + COUNT(CASE [TYPE] WHEN 
    300 THEN 1 ELSE NULL END))) AS Ratio 
    FROM historytable 

は基本的に私は活動タイプ400と300のカウントで割った活動タイプ500のカウント数の割合(%)を取得しようとしている、と私はエラーを取得維持。

+1

エラーは何ですか?何のRDBMSを使用していますか? –

+0

'NULL'を' 0'に変更します。それはおそらくあなたの問題です。 –

答えて

3

私はこれを記述します。私は(個人的な好み、count()が微細である)の計算このタイプのcount()sum()を好む

SELECT (sum(case when [type] = 500 then 100.0 else 0 end)/
     sum(case when [type] in (300, 400) then 1 end) 
     ) as ratio 
FROM historytable; 

。あなたの問題は、分母の不足分である。

0

このようなものを試してみてください。

SELECT (
    100.0 *(
     SELECT count(*) 
     FROM historytable 
     WHERE [type]=500 
)/( 
    100 * (
     (
     SELECT count(*) 
     FROM historytable 
     WHERE [type]=400 
    ) + (
     SELECT count(*) 
     FROM historytable 
     WHERE [type]=300 
    ) 
    ) 
) 
) as ratio 

mysqlデータベースを使用して、[タイプ]とそのテーブルに固有の値を持つデータテーブルでこれをテストできました。

SELECT (
    100.0 *(
     SELECT count(*) FROM my_table WHERE record_type='value_1' 
)/( 
     100 *(
      (
       SELECT count(*) FROM my_table WHERE record_type='value_2' 
     ) + (
       SELECT count(*) FROM my_table WHERE record_type='value_3' 
     ) 
    ) 
) 
) as ratio; 
+---------+ 
| ratio | 
+---------+ 
| 1.61804 | 
+---------+ 
1 row in 

set (0.00 sec) 
関連する問題