Hallo,
ich habe folgendes (für euch sicher simples) Problem.
Ich habe eine Datenbank in der Schulnoten enthalten sind.
Ich möchte nun wissen, wie oft jede Note vorkommt und zugleich wie groß der Prozentanteil dieser Note ist. Zusätzlich sollten die Prozentwerte auf eine Nachkommastelle gerundet werden und genial wäre es, wenn die letzte Zeile (gesamt |26 | 100,0) auch irgendwie zu programmieren ist
Also so sollte es dann aussehen.
note | Anzahl | Prozent
1 | 5 | 19,2
2 | 10 | 38,5
3 | 1 | 3,8
4 | 3 | 11,5
5 | 4 | 15,4
6 | 3 | 11,5
gesamt | 26 | 100,0
Geht das überhaupt? Und wenn ja, wie?
Vielen Dank schonmal für eure Hilfe,
Jürgen
Du hast leider vergessen, die Struktur Deiner Tabelle zu posten, deswegen mal ein Schuss in's Blaue
Da Du keine Version angegeben hast, gehe ich davon aus, dass Du die aktuelle PostgreSQL Version (8.4) verwendest.Code:select note::text, anzahl, round( (anzahl_note::numeric / alle_noten::numeric) * 100, 2) as prozent from ( select distinct on (note) note, count(*) over (partition by note) as anzahl, count(*) over (partition by null) alle_noten from bewertung ) t union all select 'Gesamt', count(*), 100.0 from bewertung
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
Hallo,
ja, ich hab die aktuelle PostgreSQL Version (8.4) drauf.
Wenn ich es so mache, wie beschrieben, dann kommt immer eine Fehlermeldung wegen "over".
Jetzt hab ich es mal anders geschrieben, nämilch so:
Das funktioniert auch soweit, nur werden die Prozentangaben auf ganze Zahlen gerunden bzw. abgeschnitten. Wie kann ich da noch den Befehl bringen, dass die Prozentzahlen auf 2 Nachkommastellen gerundet werden?Code:SELECT DISTINCT (note) AS Note, COUNT(note) AS Anzahl, COUNT(note) * 100 / (SELECT COUNT(note) FROM db) AS Prozent FROM db GROUP BY note ORDER BY note
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Entweder hast Du mein Beispiel falsch abgetippt oder Du hast kein 8.4
Das könnte um einiges langsamer sein als meine Lösung. Ich bin nicht ganz sicher, ob das "(SELECT COUNT(note) FROM db) " nicht für jede Zeile einmal aufgerufen wird, oder ob Postgres so schlau ist, dass nur einmal zu machen.SELECT DISTINCT (note) AS Note,
COUNT(note) AS Anzahl,
COUNT(note) * 100 / (SELECT COUNT(note) FROM db)
AS Prozent
FROM db
GROUP BY note
ORDER BY note
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen