Kess: wie Zahlen in Prozentzahlen umwandeln

Beitrag lesen

Hallo Beate,

Jetzt interessiert mich nicht mehr, wer für was, sondern wieviele Personen für was gestimmt haben.
Das erreiche ich durch das folgende select-Statement:

select Obst, count(*) as Anzahl from table group by Obst order by Anzahl desc, Obst

dadurch ensteht die folhgende Ausgabe:

Obst          Anzahl

Apfel             2
Birne             2
Erdbeere        1

Soweit so gut, aber jetzt möchte ich die Anzahl nicht als Zahlen sonder in Prozent ausgegeben haben, so daß das Ergebnis folgendermaßen aussehen würde:

Obst          Prozent

Apfel            40
Birne            40
Erdbeere       20

Wer weiß, wie ich die select-Anweisung verändern muß, damit diese Ausgabe herauskommt?
Wenn's geht in MySQL oder Oracle.

Wenn dir eine Oracle Datenbank zur Verfuegung steht, kannst du dir eine kleine PL/SQL Funktion schreiben:

Create Or Replace PACKAGE math is
  FUNCTION Rowcount Return NUMBER;
  Pragma Restrict_References(Rowcount, WNDS, WNPS, RNPS);
End  math;
/
Create or Replace PACKAGE BODY math is
  FUNCTION Rowcount Return NUMBER is anzahl INTEGER;
  Begin
    SELECT count(*) INTO anzahl FROM table;
    Return anzahl;
  End Rowcount;
End math;
/

Die Funktion Rowcount wird damit definiert und dauerhaft im Package math in der Datenbank unter deiner Userid abgelegt.
math.Rowcount liefert die Anzahl der Saetze in der Tabelle table zurueck.
Das gewuenschte Ergebnis erhalst du dann mit:

SELECT Obst, Count(*)*100 /math.Rowcount as Prozent
FROM table
GROUP BY obst

Ich weiss nicht, ob MySQL auch Prozeduren erlaubt. Falls nicht, kannst du dir mit einer Hilfstabelle behelfen:

CREATE table temp (anzahl integer);

1. Schritt:
DELETE FROM temp;

INSERT INTO temp
SELECT count(*) FROM table;

2. Schritt:

SELECT a.Obst, Count(a.*)*100/b.anzahl
FROM table a, temp b
GROUP BY a.Obst

Viele Gruesse
  Kess