2012-05-07 15 views
5

私はグループ化でき、各グループの行の割合を知りたいデータセットを持っています。COUNT()を使用した計算

これは、ほぼそれは私がこれを正しくキャストするにはどうすればよいの型キャスト

SELECT COUNT(*)/(SELECT COUNT(name) 
        FROM x 
        WHERE d = '0') 
    FROM x, y 
    WHERE x.a = y.a AND x.b = '0' 
    GROUP BY y.c 
    ORDER BY y.c ASC 

が不足しているため私見のグループごとに0を返すことを除いて、働くように見えますか?あなたは、あなたの問題が解決される可能性がありますfloatに変換する場合は、

select 1.0 * count(*)/..... 

答えて

3

よりもむしろ1.0を乗じ、あなただけ唱えられます。それは私にとってはより清潔で明快です。 1つは、使用するデータタイプを明確にしていることです。正確なnumeric計算のための追加費用を支払うのではなく、float4またはfloat8近似の精度で十分満足できるかもしれません。

SELECT COUNT(*)::float/(SELECT COUNT(name) 
          FROM x 
          WHERE d = '0')::float 
    FROM x, y 
    WHERE x.a = y.a AND x.b = '0' 
    GROUP BY y.c 
    ORDER BY y.c ASC 
 
test=# select 1.0 * 5/10; 
     ?column?   
------------------------ 
0.50000000000000000000 
(1 row) 

test=# select pg_typeof(1.0 * 5/10); 
pg_typeof 
----------- 
numeric 
(1 row) 

test=# select 5::float/10::float; 
?column? 
---------- 
     0.5 
(1 row) 

test=# select pg_typeof(5::float/10::float); 
    pg_typeof  
------------------ 
double precision 
(1 row) 
3

SELECT convert(double, COUNT(*))/(SELECT convert(double, COUNT(name)) 
        FROM x 
        WHERE d = '0') 
    FROM x, y 
    WHERE x.a = y.a AND x.b = '0' 
    GROUP BY y.c 
    ORDER BY y.c ASC 
+0

うわー...私が好きなこの1 :) 時々最も簡単な解決策は、1逃れる... –

1

を行うことができるはず

+0

ERROR:コラム "フロート" は存在しません LINE 1:SELECT変換(フロート、COUNT( *))/(SELECT convert(float、COU ... –

+0

ダブルで試してみてください。 –

関連する問題