Prozent berechnen

  • Hi,


    irgendwie steh ich grad an.Ich hab eigentlich eine relativ einfaches Problem und zwar möchte ich den prozentualen Anteil eines Wertes zur gesamten Tabelle berechnen, also:


    Erstmal die Häufigkeit des Wertes:

    SQL
    SELECT count(*) 
    FROM X
    WHERE Y=Z


    Dann die Gesamtanzahl der Tabelle:

    SQL
    SELECT count(*) 
    FROM X


    Und dann wäre die Berechnung: Ergebnis_des_ersten_SELECTS*100/Ergebnis_des_zweiten_SELECTS


    So, und meine Frage wäre jetzt :Kann man das Ganze auch in einem SELECT-Statement zusammenfassen?

  • es ist zwar in einem SELECT-Statement, aber mit Subqueries:
    wie z.B.

    SQL
    SELECT view1, view2
    FROM (SELECT count(*)
          FROM X) view1, 
         (SELECT count(*)
          FROM X
          WHERE X=Y) view2
    WHERE (view2 * 100 / view1) > 0;


    hoff es ist richtig.

  • Ich würds ein bisschen anders machen:


    Code
    select count(*)/(select count(*) from x) from x where y=z


    edit: wenn du das aber in einer programmiersprache verwendest, wärs vielleicht effizienter, zuerst die Gesamtanzahl der Zeilen zu holen und dann den SQL-String im Programm zusammenzubauen, so in der Art


    x = (select count(*) from x) <= ist halt pseudocode jetzt
    y = "select count(*)/" + x + " from x where y = z"

  • ja, mit subqueries hab ich eh gemeint :).


    Das einzige Problem ist, dass ich jetzt einen "Column not found: VIEW1"-Fehler bekomme. Komm grad drauf, dass SQL nicht grad meine Stärke is :shinner:...

  • hm... probier mal:

    SQL
    SELECT view1.anzahl, view2.vorkommen, view3.prozent
    FROM (SELECT count(*) anzahl
          FROM X) view1, 
         (SELECT count(*) vorkommen
          FROM X, Y
          WHERE X.a=Y.a) view2,
         (SELECT (view2.vorkommen * 100 / view1.anzahl) prozent) view3
    WHERE view3.prozent > 0;


    Somit wär's alles separat und doch in einem, obs funkioniert, kann ich nicht garantieren.

  • Danke erstmal, aber jetzt regt er sich auf, dass im letzten SELECT kein FROM steht. Wenn ich dann schreib FROM view1, view2, dann kennt er die Table anscheinend noch nicht


    stimmt, den FROM hab ich glatt übersehen...


    aber das würde gehen:

    SQL
    SELECT view1.anzahl, view2.vorkommen, (view2.vorkommen * 100 / view1.anzahl) prozent
    FROM (SELECT count(*) anzahl
          FROM X) view1, 
         (SELECT count(*) vorkommen
          FROM X, Y
          WHERE X.a=Y.a) view2;


    natürlich gehts alles in einem Select auch, wegen nachträgliche erweiterungen ist die ausführlichere version oft hilfreich.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!