Benutzer mit den meisten Antworten
Prozentuale Anzahl ausgeben

Frage
-
Hallo zusammen,
ich sollte die prozentuale Anzahl eines Wertes in meiner Tabelle ausgeben. (Wie oft kommt der Wert in der Tabelle vor?)
Irgendwie klappt das nicht so richtig.
Hat jemand eine Idee?
SELECT Klasse, CONCAT((SELECT count(Klasse) from Ticketuebersicht) / count(*) * 100, '%') AS proz FROM Ticketuebersicht GROUP BY Klasse
Habs mal so probiert. bekomme aber komische Werte.
Info: Klasse ist ein varchar.
Danke und gruß
Timo
Antworten
-
Hallo Timo,
hier mal ein einfaches Beispiel, wie Du die Werte ermitteln kannst: Eine kleine CTE mit der Gesamtanzahl, durch die dann die jeweilige Anzahl dividiert wird.
DECLARE @Ticketuebersicht AS Table (Klasse varchar(20)); INSERT INTO @Ticketuebersicht VALUES ('Klasse1'); INSERT INTO @Ticketuebersicht VALUES ('Klasse2'),('Klasse2'); INSERT INTO @Ticketuebersicht VALUES ('Klasse3'),('Klasse3'),('Klasse3') ; INSERT INTO @Ticketuebersicht VALUES ('Klasse4'),('Klasse4'),('Klasse4'),('Klasse4'); ;WITH total AS (SELECT COUNT(*) AS Gesamt FROM @Ticketuebersicht) SELECT Klasse ,100.0 * COUNT(*) / MAX(total.Gesamt) AS Prozent FROM @Ticketuebersicht, total GROUP BY Klasse
Olaf Helper
Blog Xing- Als Antwort markiert TimoB_ Donnerstag, 2. Mai 2013 09:23
Alle Antworten
-
Hallo Timo,
hier mal ein einfaches Beispiel, wie Du die Werte ermitteln kannst: Eine kleine CTE mit der Gesamtanzahl, durch die dann die jeweilige Anzahl dividiert wird.
DECLARE @Ticketuebersicht AS Table (Klasse varchar(20)); INSERT INTO @Ticketuebersicht VALUES ('Klasse1'); INSERT INTO @Ticketuebersicht VALUES ('Klasse2'),('Klasse2'); INSERT INTO @Ticketuebersicht VALUES ('Klasse3'),('Klasse3'),('Klasse3') ; INSERT INTO @Ticketuebersicht VALUES ('Klasse4'),('Klasse4'),('Klasse4'),('Klasse4'); ;WITH total AS (SELECT COUNT(*) AS Gesamt FROM @Ticketuebersicht) SELECT Klasse ,100.0 * COUNT(*) / MAX(total.Gesamt) AS Prozent FROM @Ticketuebersicht, total GROUP BY Klasse
Olaf Helper
Blog Xing- Als Antwort markiert TimoB_ Donnerstag, 2. Mai 2013 09:23
-
Danke für den Tipp, hat funktioniert.
DECLARE @Ticketuebersicht AS Table (Klasse varchar(50)); INSERT INTO @Ticketuebersicht select Klasse from Ticketuebersicht ;WITH total AS (SELECT COUNT(*) AS Gesamt FROM @Ticketuebersicht) SELECT Klasse ,100.0 * COUNT(*) / MAX(total.Gesamt) AS Prozent FROM @Ticketuebersicht, total GROUP BY Klasse
PS: Kannst du mir noch kurz sagen, wie ich die Prozentspalte auf 2 nachkommastellen beschränke?- Bearbeitet TimoB_ Donnerstag, 2. Mai 2013 09:23
-
Eigentlich ist es Aufgabe des Frontend, die Werte im gewünschtem Format anzuzeigen; aber Du könntest es SQL Server seitig auf einen Datentypen mit festen 2 Nachkommastellen wie Decimal(18, 2) konvertieren:
DECLARE @Ticketuebersicht AS Table (Klasse varchar(20)); INSERT INTO @Ticketuebersicht VALUES ('Klasse1'); INSERT INTO @Ticketuebersicht VALUES ('Klasse2'),('Klasse2'); INSERT INTO @Ticketuebersicht VALUES ('Klasse3'),('Klasse3'),('Klasse3') ; INSERT INTO @Ticketuebersicht VALUES ('Klasse4'),('Klasse4'),('Klasse4'),('Klasse4'); ;WITH total AS (SELECT COUNT(*) AS Gesamt FROM @Ticketuebersicht) SELECT Klasse ,CONVERT(decimal(18, 2), (100.0 * COUNT(*) / MAX(total.Gesamt))) AS Prozent FROM @Ticketuebersicht, total GROUP BY Klasse
Mit der Round Funktion könntest Du noch die Werte runden lassen.Olaf Helper
Blog Xing