Kess: wie Zahlen in Prozentzahlen umwandeln - Nachtrag

Beitrag lesen

Hallo Beate,

Die MySQL-Loesung funktioniert natuerlich auch mit Oracle.
Ich persoenlich finde eine Funktion, wie man sie mit PL/SQL bei Oracle realisieren kann einfach eleganter. Aber nicht alle Datenbanken bieten diese Funktionalitaet an.  Darum hatte ich auch die zweite Variante gepostet. Die lauft mit jeder Datenbank, die Standard SQL unterstuetzt.

Table1 = die urspruengliche Tabelle
Table2 = die temporaere Tabelle

Create table Table2 (integer Anzahl);
delete from Table2;
insert into Table2 select count(*) from Table1;
select a.Spalte1, count(*)*100/b.Anzahl as prozent from Table1 a, Table2 b group by a.Spalte1, b.Anzahl order by prozent desc, Spalte1;

Create Table2 brauchst du natuerlich nur ein einziges mal auszufuehren. Wenn die Tabelle einmal existiert bleibt sie auch erhalten.
Delete from Table2 sorgt dafür, daß bei wiederholter Ausfuehrung kein alter Mist von vorherigen Abfragen in Table2 stehen bleibt.
Die eigentliche Verarbeitung erledigen das Insert- und das Select-Statement.

  1. Die Prozentausgaben werden übrigens mit zwei Nachkommastellen angegeben. Weißt Du, ob das immer so ausgegeben wird, oder kann man das variable halten?

Dazu kannst du die Funktion ROUND(x,n) benutzten. Dabei ist x die Zahl, die gerundet werden soll und n die Zahl der Nachkommastellen, auf die gerundet werden soll. Gerundet wird kaufmaennisch.
ROUND(count(*)*100/b.Anzahl, 3) gibt die Prozentzahlen mit 3 Nachkommastellen aus.

  1. Denkst Du, dass die man die Zeilen fuer MySQL und Oracle identisch halten kann? Ich brauche naemlich beides.

MySQL hat natürlich nicht den gleichen Funktionsumfang wie Oracle. Solange du dich aber auf Standard SQL beschraenkst und dabei beachtest, was MySQL noch nicht beherrscht, kannst du die Zeilen identisch halten. Das ist der Sinn der Standardisierung. SQL sollte eben jede Datenbank anstandslos ausfuehren. :-)
Zu MySQL gibt es auch gute Quellen im Internet. Schau mal im Linkverzeichns unter Datenbankanbindung (http://www.teamone.de/selfaktuell/links/datenbank_dokus.htm). Wenn du denn Quellen folgst, findest du unter http://web.mysql.com/Manual_chapter/manual_Compatibility.html#Missing_functions Angaben über nich nicht in MySQL realisierte Funktionen.

Jedenfalls herzlichen Dank, das war einfach genial (nachdem ich schon zwei Tage herumgebastelt habe).

Wirklich gern geschehen. :-)

Viele Gruesse
  Kess