Ergebnis 1 bis 5 von 5

Thema: Prozentanteile berechnen

  1. #1
    Scrapy ist offline Neuer Benutzer
    Registriert seit
    17.08.2010
    Beiträge
    2

    Frage Prozentanteile berechnen

    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

  2. #2
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    493

    Standard

    Du hast leider vergessen, die Struktur Deiner Tabelle zu posten, deswegen mal ein Schuss in's Blaue
    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
    Da Du keine Version angegeben hast, gehe ich davon aus, dass Du die aktuelle PostgreSQL Version (8.4) verwendest.
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

  3. #3
    Scrapy ist offline Neuer Benutzer
    Registriert seit
    17.08.2010
    Beiträge
    2

    Standard

    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:

    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
    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?

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von Scrapy Beitrag anzeigen
    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:

    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
    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?
    Wie lautet die Fehlermeldung genau?

    Nachkommastellen: caste den Notenwert (INT) auf numeric oder float, und verwende to_char() zum formatieren.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    493

    Standard

    Zitat Zitat von Scrapy Beitrag anzeigen
    Wenn ich es so mache, wie beschrieben, dann kommt immer eine Fehlermeldung wegen "over".
    Entweder hast Du mein Beispiel falsch abgetippt oder Du hast kein 8.4

    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
    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.
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum