Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Zusätzliche Spalte

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Franz66, 18 April 2013.

  1. Franz66

    Franz66 Benutzer

    Hallo
    Als neu brauche ich etwas Hilfe ;-)

    Ich habe eine Abfrage erstellt aber ich würde gerne noch eine spalte kreiiren, mit dem "Prozent-Wert" der Resultate.

    Hier den Code:

    SELECT

    ursache_auf,
    count (ursache_auf) as anzahl_faelle

    FROM
    v_rep_14_dev



    left join wf_issue on v_rep_14_dev.issue_id = wf_issue.issue_id

    left join wf_issue_type on wf_issue.type_id = wf_issue_type.type_id

    where wf_issue_type.type_code ='CMT' and

    v_rep_14_dev.status_code='CLOSED' and

    ursache_auf is not null


    group by
    ursache_auf

    Nun brauche ich die Spalte "Prozent" sowie in Excel berechnet worden ist. anzahl_faelle.jpg anzahl_excel.png

    Danke für die Hilfe.

    Tschuss
    Francesco
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du verfrachtest Deine Abfrage in ein Subselect und baust außen drum herum das:

    select ursache_auf, anzahl_fälle, 100*c2/(sum(c2) over ())::numeric from (hier deine bisherige abfrage) bla group by ursache_auf, anzahl_fälle.

    Demo:

    Deine bisherige Abfrage liefert:

    Code:
    test=*# select * from franz ;
            c1        |  c2
    ------------------+------
     unfall           |  836
     krank            | 3309
     krank und unfall |   64
    (3 rows)
    
    Und nun erweitert:
    Code:
    test=*# select c1,c2, 100*c2/(sum(c2) over ())::numeric from franz group by c1,c2;
            c1        |  c2  |      ?column?
    ------------------+------+---------------------
     krank und unfall |   64 |  1.5205511998099311
     krank            | 3309 | 78.6172487526728439
     unfall           |  836 | 19.8622000475172250
    (3 rows)
    

    Andreas
     
  3. ukulele

    ukulele Datenbank-Guru

    Das könnte etwa so aussehen:
    Code:
    SELECT
     
    ursache_auf,
    count (ursache_auf) as anzahl_faelle,
    100 / (        SELECT
                count (ursache_auf)
                FROM
                v_rep_14_dev
                left join wf_issue on v_rep_14_dev.issue_id = wf_issue.issue_id
                left join wf_issue_type on wf_issue.type_id = wf_issue_type.type_id
                where wf_issue_type.type_code ='CMT' and
                v_rep_14_dev.status_code='CLOSED' and
                ursache_auf is not null ) as anzahl_prozent
     
    FROM
    v_rep_14_dev
     
    left join wf_issue on v_rep_14_dev.issue_id = wf_issue.issue_id
     
    left join wf_issue_type on wf_issue.type_id = wf_issue_type.type_id
     
    where wf_issue_type.type_code ='CMT' and
     
    v_rep_14_dev.status_code='CLOSED' and
     
    ursache_auf is not null
     
    group by
    ursache_auf
    Im Prinzip musst du in einer Unterabfrage die Gesamtanzahl ermitteln und damit dann Dreisatz rechnen. Da ich deinem Code nicht ganz entnehmen kann in welcher Tabelle ursache_auf steht habe ich deinen ganzen Select in der Unterabfrage zugrunde gelegt. Eventuell läßt sich das aber auch noch reduzieren.
     
  4. Franz66

    Franz66 Benutzer

    hallo zusammen
    Vielen Dank für die Hilfe: es hat geklappt!
     
  5. Franz66

    Franz66 Benutzer

    hallo zusammen
    ich brauche wieder hilfe :)
    Ist es möglich direkt in der Abfrage die Resultate der Spalte mit "Prozent" Zeichnen zu ergänzen?
    query.png

    Hier den Code:

    SELECT
    ursache_auf,
    count (ursache_auf) as anzahl_faelle,
    (SELECT count (ursache_auf) FROM public.v_rep_14_dev) as AnzTotal,
    (round(100*count (ursache_auf)::integer / (SELECT count ( ursache_auf ) FROM public.v_rep_14_dev
    left join wf_issue on v_rep_14_dev.issue_id = wf_issue.issue_id
    left join wf_issue_type on wf_issue.type_id = wf_issue_type.type_id
    where wf_issue_type.type_code ='CMT' and
    v_rep_14_dev.status_code='CLOSED')::numeric,1)) as Proz
    FROM
    public.v_rep_14_dev
    left join wf_issue on v_rep_14_dev.issue_id = wf_issue.issue_id
    left join wf_issue_type on wf_issue.type_id = wf_issue_type.type_id
    where wf_issue_type.type_code ='CMT' and
    v_rep_14_dev.status_code='CLOSED' and
    ursache_auf is not null
    group by
    ursache_auf
    order by anzahl_faelle DESC


    Danke viel Mals
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ja, geht. Verwende to_char() zum formatieren und hänge via || '%' das dann drann.
     
  7. Franz66

    Franz66 Benutzer

    danke für die Info, es ist für mich etwas schwierig zu verstehen wo soll ich diese ergänzung hinzufügen
    habe versucht an dieverse stellen zu platzieren aber es funktioniert nicht
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Code:
    db183175=# select * from franz ;
     a  | b
    ----+----
     10 | 30
    (1 row)
    
    db183175=# select a/b::numeric as "als float", to_char(100*a/b::numeric,'99.99') || '%' as "als text mit %" from franz ;
           als float        | als text mit %
    ------------------------+----------------
     0.33333333333333333333 |  33.33%
    (1 row)
    
     
    ukulele gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden