2009-07-14 4 views
9

次のクエリがあります。これは、特定の製品の割合を製品の合計数と比較して求めようとしています。 IEは:1つのレコードのみが存在しない限り、[製品数]/[総製品] =パーセントSQLを2つの数で除算する()

;WITH totalCount AS(
    SELECT 
     CAST(COUNT(id) as Integer)as totalCount 
    FROM TABLE_NAME 
) 
SELECT 
    ((CAST(COUNT(DISTINCT id) as Integer)/(SELECT * FROM totalCount))*100) as 'Percent' 
FROM TABLE_NAME 

ただし、パーセント列は常に "0" を返します。さらに、totalCountとSelectクエリを1つに追加する方法はありますか?

基本的に、2つのCount()フィールドをどのように分割しますか?

答えて

9

整数(DECIMAL?)以外の数として合計数をキャストします。数学は丸められます。

+1

ありがとうございました!それはいつもあなたを得る簡単なものです。 – Jefe

+2

そのコードにコメントしてください。あなたの次の開発者はあなたの賢さとは異なるかもしれません。 –

+0

@Matthew:素晴らしい提案! – n8wrl

2

は、それはすべきではありません:

;WITH totalCount AS(
    SELECT 
     CAST(COUNT(id) as Integer)as totalCount 
    FROM TABLE_NAME 
) 
SELECT 
    ((CAST(COUNT(DISTINCT id) as Integer)*100/(SELECT count(*) FROM totalCount))) as 'Percent' 
FROM TABLE_NAME 

注SELECT COUNT(*)。また、除算する前に乗算する必要があります。そうでなければ常にゼロになります。

+0

totalCountクエリは1行しか返さないので、COUNT(*)を追加すると常に1が返されます。実際の合計ではなくしかし、助けをありがとう:) – Jefe

+0

大丈夫:-)しかし、100倍にすることは確かにあなたの問題を解決します。 –

5

整数ではなく小数精度のものとしてキャストします。フロートかリアルか。

select cast(distinctCount as real)/cast(totalCount as real) * 100.00 
    , distinctCount 
    , totalCount 
from (
select count(distinct id) as distinctCount 
    , count(id) as totalCount 
    from Table) as aggregatedTable 
+0

2つのクエリを1つに結合する方法を教えてくれてありがとう。 – Jefe

+0

@Jefe:どうしたら+1? lol –

+1

小数点は、不正確なデータ型であり、丸め誤差を導入する可能性があるため、数式の計算でfloatまたはrealを使用しないでください。 – HLGEM

関連する問題