2017-06-21 6 views
0

Ich versuche Count-Anweisungen in SQL hinzufügen, die Bedingungen haben, und ich bekomme immer einen Fehler. Unten ist mein Code:COUNT Anweisungen in SQL hinzufügen

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 

Grundsätzlich durch Zählung der Leistungsart 400 und 300, und ich erhalte einen Fehler Ich versuche, den Prozentsatz der Anzahl der Leistungsart 500 geteilt zu bekommen.

+1

Was ist der Fehler? Welche RDBMS verwenden Sie? –

+0

Ändern Sie den Wert "NULL" in "0". Das ist wahrscheinlich dein Problem. –

Antwort

3

Ich würde schreiben dies als:

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; 

I sum() zu count() für diese Art der Berechnung bevorzugen (persönliche Präferenz, count() ist in Ordnung). Dein Problem ist ein fehlender Paren im Nenner.

0

Versuchen Sie etwas wie das.

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 

Verwendung einer MySQL-Datenbank konnte ich dies mit [Typ] auf einer Datentabelle testen und Werte dieser Tabelle spezifisch.

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)