2017-02-24 7 views
1
SELECT 
    person, 
    (CAST(/* I tried with and without CAST */ 
    COUNT(`something`)//* success count is numerator */ 
    (COUNT(`something`) + 
    SUM(case when `something` is null then 1 else 0 end)) AS DECIMAL(3,1)) 
    /* sum of success + failure counts is denominator. */ 
    ) success_ratio, 
    SUM(case when `something` is null then 1 else 0 end) fail_count, 
    COUNT(`something`) success_count 
FROM 
    `table` 
GROUP BY 
    person 
ORDER BY 
    person 

success_countfail_count両方の出力の整数をパーセンテージまたは小数を計算します。SQL Serverは、私の出力では、複雑な式

CASTを除いた小数部を最初に作成しようとしたとき、ほとんど0を得て、1を数回返しました。 CASTを試しましたが、今はちょうど0.01.1です。

私は間違っていますか?

答えて

1

私はあなたの問題はあなたが整数の除算の値ではなく、あなたが読んで物事が少し楽にするためにサブクエリを使用することができ、個々の部品

をキャストし、あなたに1.0または0.0を使用していると思いますcase文を使用すると、フィールドを浮動小数点にすることができます

SELECT person, 
     success_count/(success_count + fail_count) success_rate, 
     fail_count, success_count 
FROM (
    SELECT person, 
    (
    SUM(case when `something` is null then 1.0 else 0.0 end) fail_count, 
    SUM(case when `something` is null then 1.0 else 0.0 end) success_count 
    FROM `table` 
    GROUP BY person 
) x 
ORDER BY person