Prozentberechnung im MYSQL-Statement
Patrick
- datenbank
0 André Laugks0 Patrick
0 Antje Hofmann0 Patrick0 André Laugks0 Patrick
Hallo,
ich lese via MYSQL-Statement 12 Zeilen mit insgesamt 3 Feldern aus. Am Ende jeder Zeile berechne ich noch die Prozente mit:
$prozent = $gesamt *100 / $sumgesamt;
Jetzt möchte ich die Spalten per Mausklick sortierbar machen..., bei den 3 Spalten, die aus der DB kommen ist das kein Problem..., ich möchte aber auch die Prozentspalte sortieren lassen können und dazu ist es meiner Ansicht nach notwendig, dass die Berechnung im MYSQL-Statement direkt geschieht. Geht das überhaupt... und wenn ja wie?
Gruss
Patrick
Hallo!
Jetzt möchte ich die Spalten per Mausklick sortierbar machen..., bei den 3 Spalten, die aus der DB kommen ist das kein Problem..., ich möchte aber auch die Prozentspalte sortieren lassen können und dazu ist es meiner Ansicht nach notwendig, dass die Berechnung im MYSQL-Statement direkt geschieht. Geht das überhaupt... und wenn ja wie?
Wie stehen den die Prozente in der Spalte? Dort kann ja nur eine Dezimalzahl/Zahl ziwschen 0-100 stehen.
Du sortierst also nach dieser Spalte und wenn Du möchtest, auch diese mit anderen Spalten zusammen.
z.B.
SELECT * FROM tabelle ORDER BY spalte1 ASC, spalte2 ASC, prozente ASC;
MfG, André Laugks
Hallo!
Jetzt möchte ich die Spalten per Mausklick sortierbar machen..., bei den 3 Spalten, die aus der DB kommen ist das kein Problem..., ich möchte aber auch die Prozentspalte sortieren lassen können und dazu ist es meiner Ansicht nach notwendig, dass die Berechnung im MYSQL-Statement direkt geschieht. Geht das überhaupt... und wenn ja wie?
Wie stehen den die Prozente in der Spalte? Dort kann ja nur eine Dezimalzahl/Zahl ziwschen 0-100 stehen.
Du sortierst also nach dieser Spalte und wenn Du möchtest, auch diese mit anderen Spalten zusammen.
z.B.
SELECT * FROM tabelle ORDER BY spalte1 ASC, spalte2 ASC, prozente ASC;
Aber die Spalte gibt es nicht in der Datenbank, sie wird in der tabelle erst berechnet... Die ersten drei Spalten bestehen aus Daten die aus der DB kommen, die vierte ist die Prozentspalte die berechnet wird anhand der Daten der dritten Spalte und der Gesamtsumme...
MfG, André Laugks
Hallo!
Aber die Spalte gibt es nicht in der Datenbank, sie wird in der tabelle erst berechnet... Die ersten drei Spalten bestehen aus Daten die aus der DB kommen, die vierte ist die Prozentspalte die berechnet wird anhand der Daten der dritten Spalte und der Gesamtsumme...
Dann gib doch mal ein Beispiel, also 10 Zeilen dieser Tabelle.
Müßen Datensätze/Zeilen addiert werden? Mach mal ein paar Angaben. Wie soll das Endergebnis aussehen, bzw. wie stellst Du Dir es vor?
MfG, André Laugks
Hallo Patrick
ich lese via MYSQL-Statement 12 Zeilen mit insgesamt 3 Feldern aus. Am Ende jeder Zeile berechne ich noch die Prozente mit:
$prozent = $gesamt *100 / $sumgesamt;
dazu ist es meiner Ansicht nach notwendig, dass die Berechnung im MYSQL-Statement direkt geschieht. Geht das überhaupt... und wenn ja wie?
zwei Varianten
über php
du steckst deine Ergebnisse in ein Array, das du passend sortierst
über mysql
kommt darauf an, wie du auf die Zwischenwerte gesamt und sumgesamt kommst. Stecken die ebenfalls in der Zeile gehts etwa so:
select (gesamt*100/sumgesamt) as prozent
from tabelle
order by prozent
Viele Grüße
Antje
Hallo,
erstmal vielen Dank für Eure Antworten, ich werde nachfolgend nochmal genauer auf das Prob eingehen...
In der Tabelle stehen:
Feld1, Feld2 und die Summe aus beiden (Feld Gesamt)
Im Formular werden jetzt zwölf Zeilen mit den folgenden Feldern aufgelistet:
$Feld1, $Feld2 und $Gesamt
Die einzelnen Spalten werden über ein Select addiert:
$query="SELECT sum(feld1) AS sumfeld1, sum(feld2) AS sumfeld2, sum(gesamt) AS sumgesamt FROM tabelle WHERE id='$id' GROUP BY xyz";
Im Formular steht eine vierte Spalte (prozent), der Wert wird im Formular pro Zeile berechnet mit:
$prozent = $gesamt *100 / $sumgesamt;
Nach den Feldern Feld1, Feld2 und Gesamt kann ich problemlos sortieren (Klick auf einen Button und der Select wird durch ORDER BY ergänzt...)... ich möchte aber auch nach den Prozentwerten sortieren können. Um das zu tun habe ich den Tipp bekommen, die Berechnung in den Select zu packen, nach einigem probieren habe ich allerdings aufgegeben...
Hallo!
In der Tabelle stehen:
Feld1, Feld2 und die Summe aus beiden (Feld Gesamt)
Im Formular werden jetzt zwölf Zeilen mit den folgenden Feldern aufgelistet:
$Feld1, $Feld2 und $Gesamt
Wieso zwölf? $Feld1, $Feld2 und $Gesamt ist bei mir drei.
Die einzelnen Spalten werden über ein Select addiert:
$query="SELECT sum(feld1) AS sumfeld1, sum(feld2) AS sumfeld2, sum(gesamt) AS sumgesamt FROM tabelle WHERE id='$id' GROUP BY xyz";
Im Formular steht eine vierte Spalte (prozent), der Wert wird im Formular pro Zeile berechnet mit:
$prozent = $gesamt *100 / $sumgesamt;
Nach den Feldern Feld1, Feld2 und Gesamt kann ich problemlos sortieren (Klick auf einen Button und der Select wird durch ORDER BY ergänzt...)... ich möchte aber auch nach den Prozentwerten sortieren können. Um das zu tun habe ich den Tipp bekommen, die Berechnung in den Select zu packen, nach einigem probieren habe ich allerdings aufgegeben...
Dann gebe doch mal ein Beispiel mit so 10 Datensätzen. Man kann sich so ein besseres Bild machen.
MfG, André Laugks
Hallo!
In der Tabelle stehen:
Feld1, Feld2 und die Summe aus beiden (Feld Gesamt)
Im Formular werden jetzt zwölf Zeilen mit den folgenden Feldern aufgelistet:
$Feld1, $Feld2 und $Gesamt
Wieso zwölf? $Feld1, $Feld2 und $Gesamt ist bei mir drei.
Die einzelnen Spalten werden über ein Select addiert:
$query="SELECT sum(feld1) AS sumfeld1, sum(feld2) AS sumfeld2, sum(gesamt) AS sumgesamt FROM tabelle WHERE id='$id' GROUP BY xyz";
Im Formular steht eine vierte Spalte (prozent), der Wert wird im Formular pro Zeile berechnet mit:
$prozent = $gesamt *100 / $sumgesamt;
Nach den Feldern Feld1, Feld2 und Gesamt kann ich problemlos sortieren (Klick auf einen Button und der Select wird durch ORDER BY ergänzt...)... ich möchte aber auch nach den Prozentwerten sortieren können. Um das zu tun habe ich den Tipp bekommen, die Berechnung in den Select zu packen, nach einigem probieren habe ich allerdings aufgegeben...
Dann gebe doch mal ein Beispiel mit so 10 Datensätzen. Man kann sich so ein besseres Bild machen.
MfG, André Laugks
Nochmal zu Richtigstellung, ja es sind nur drei Felder also drei Spalten und insgesamt werden 12 Zeilen (Datensätze) ausgelesen somit habe ich 12 Zeile mit jeweils 3 Feldern aus der Datenbank und noch eine zusätzliche Spalte mit der Prozentberechnung...
|Name |Feld1|Feld2|Gesamt|Prozent|
|Peter | 3 | 1 | 4 | 10,3% |
|Chris | 4 | 0 | 4 | 10,3% |
|Andrea | 4 | 4 | 8 | 20,6% |
|... | ... | ... | ... | ... |
.
.
.
| Summe | 21 | 7 | 28 | 100,0%|
Die Felder werden in einer Schleife abgefragt. Die Prozentzahl wie beschrieben innerhalb der Schleife berechnet.
Zuvor wird bereits ein select mit sum auf die Felder gemacht, dass ich entsprechend die Summenfelder habe und damit die Prozente ausrechnen kann... Möchte ich nun nach Prozenten sortieren dann funktioniert das nicht, da das Feld ja immer berechnet wird und nicht aus der DB stammt. Nach Feld1, Feld2 oder Gesamt zu sortieren ist kein Thema, aber die kommen ja auch aus der DB...
Hallo!
Möchte ich nun nach Prozenten sortieren dann funktioniert das nicht, da das Feld ja immer berechnet wird und nicht aus der DB stammt. Nach Feld1, Feld2 oder Gesamt zu sortieren ist kein Thema, aber die kommen ja auch aus der DB...
Du schreibst, das Feld Prozente stammt nicht aus der DB. Wie willst Du es nun mit SQL sortieren?
Gar nicht! Kann ich gut sein, daß ich Dein Problem einfach nicht nicht verstehe!
MfG, André Laugks
Hallo,
Die Felder werden in einer Schleife abgefragt. Die Prozentzahl wie beschrieben innerhalb der Schleife berechnet.
Zuvor wird bereits ein select mit sum auf die Felder gemacht, dass ich entsprechend die Summenfelder habe und damit die Prozente ausrechnen kann... Möchte ich nun nach Prozenten sortieren dann funktioniert das nicht, da das Feld ja immer berechnet wird und nicht aus der DB stammt. Nach Feld1, Feld2 oder Gesamt zu sortieren ist kein Thema, aber die kommen ja auch aus der DB...
$prozent = $gesamt *100 / $sumgesamt;
Soweit ich das sehen kann, ist für eine konkrete Abfrage $sumgesamt eine Konstante, egal wie Du sortierst. Wenn Du also nach $prozent sortieren willst, dann kannst Du auch nach $gesamt sortieren, das sich die beiden anderen Operanden in dieser Berechnung nicht ändern.
alternativ könntest Du auch das Ergebnis des ersten SQL-Statements hernehmen und im zweiten verwenden.
Es würde zwar auch noch die Möglichkeit bestehen, mit Subselects zu arbeiten. Dagegen spricht aber IMHO erstens, daß nicht in jede Datenbank mit Subseletcs umgehen kann, und zweitens daß es potentiell unperformant sein wird.
Grüße
Klaus