2016-08-27 4 views
0

mit dem SQL-CodeSQL für Prozentsatz der Formatierung

select table.column, count(*) * 100.0/sum(count(*)) over() 
from table 
group by table.column 

Ich möchte diese Funktion für seine Effizienz verwenden, da ich auf einem großen DB arbeite. Die Funktion erzeugt beide Prozentwerte, die zu 100 summieren. Ich kann keine einfache Möglichkeit finden, nur den wahren Wert (1) oder den Wert der summierten Zahl über die Anzahl der Zeilen in der Spalte zu erzeugen. Gibt es eine einfache Möglichkeit, dies zu tun, oder muss ich eine andere Funktion verwenden?

Ein Datensatz Beispiel wäre

N, Bit 
0 | 0 
1 | 0 
2 | 1 
3 | 0 
4 | 0 
5 | 1 

Es ist ein bisschen, null Tabelle, wo ich den Prozentsatz der wahren Bits nehme. Das N steht nur für Nummer.

+1

Können Sie Eingabe- und Ausgabe-Dataset bereitstellen? –

+0

Mit Beispiel aktualisiert. Hoffe es ist spezifischer! –

+0

Welche DBMS benutzen Sie? SQL Server? MySQL? –

Antwort

1

Wenn Sie nur den Prozentsatz der wahren Bits wissen, tun gerade dies:

SELECT COUNT(NULLIF(Bit, 0))/CONVERT(Decimal, COUNT(*)) 
FROM Table 

Wenn Sie die percentaje der wahren Bits durch andere Spalte (N in diesem Fall) wissen müssen, Sie benötigen so etwas:

SELECT N, COUNT(NULLIF(Bit, 0))/t2.C 
FROM Table, (SELECT CONVERT(Decimal, COUNT(*)) C FROM Table) t2 
GROUP BY N, C 
+0

Danke, funktioniert perfekt. –

0

Verwenden Sie SUM, um die True Bits zu zählen.

SELECT 
    group_column, 
    100.0 * SUM(CASE WHEN bit_column<>0 THEN 1 ELSE 0 END)/COUNT(*) AS p 
FROM myTable 
GROUP BY group_column 
+0

Haben Sie Probleme mit dieser Lösung, da Sie einen Bitwert nicht summieren können. Casting scheint die Ergebnisse zu ruinieren und trotzdem erzeugt meine Ausgabe immer noch den 0 und 1 Wert für den Prozentsatz. –

+0

Nicht sicher, warum Ihre Konvertierung nicht funktioniert. Gemäß dieser [Datentypkonvertierungstabelle] (https://msdn.microsoft.com/en-us/library/ms191530.aspx) sollte eine "Bit" -Spalte in numerische Typen konvertierbar sein. Hoffe, es funktioniert mit CASE WHEN. –

Verwandte Themen