Berechnung in Abfrage mit AS in anderer Berechnung verwenden
wunderwarzenschwein
- datenbank
Hi,
wenn ich eine berechnete Spalte in einer Abfrage zur Berechnung einer weiteren 'virtuellen' Spalte verwenden will, kommt mySQL offenbar mit den Namen nicht ganz mit.
Ich habe eine Abfrage der Art
SELECT dmpreis, dmpreis/1.95583 AS eurpreis, eurpreis*1.16 AS inklmwst FROM tblartikel;
Das ergibt den Fehler "Unknown column 'eurpreis' in 'field list'".
Gibt es da irgend einen Workaround, dass ich nicht die Berechnung des ersten Wertes nochmal für den zweiten hinschreiben muss?
Im konkreten Fall sind die Berechnungen nämlich etwas umfangreicher, so dass das mit dem AS erheblich zur Übersichtlichkeit beitragen würde.
Any ideas?
TIA
wunderwarzenschwein
Hallo,
Gibt es da irgend einen Workaround, dass ich nicht die Berechnung des ersten Wertes nochmal für den zweiten hinschreiben muss?
Unter MySQL keinen mir bekannten.
Viele Grüße,
Christian
Moin!
SELECT dmpreis, dmpreis/1.95583 AS eurpreis, eurpreis*1.16 AS inklmwst FROM tblartikel;
Das ergibt den Fehler "Unknown column 'eurpreis' in 'field list'".
Meinst du nicht, es wäre langsam an der Zeit, mal auf Euro-Preise umzustellen? Seit 1998 ist bekannt, dass in der Bundesrepublik Deutschland das gesetzliche Zahlungsmittel auf Euro lauten wird, seit 1999 ist die Währung auf Konten und im Wertpapierhandel präsent, seit 2002 auch im Bargeld-Zahlungsverkehr.
Und du hantierst immer noch mit DM-Preisen herum... unglaublich.
Gibt es da irgend einen Workaround, dass ich nicht die Berechnung des ersten Wertes nochmal für den zweiten hinschreiben muss?
ALTER TABLE tblartikel ADD COLUMN eurpreis double;
UPDATE tblartikel SET eurpreis = dmpreis/1.95584;
(PS: Keine Garantie auf das "ALTER TABLE", die Syntax hab ich nicht auswendig im Kopf. PHPMyAdmin hilft. :) )
Und schon sparst du dir einen erheblichen, immer wiederkehrenden Berechnungsanteil.
Im konkreten Fall sind die Berechnungen nämlich etwas umfangreicher, so dass das mit dem AS erheblich zur Übersichtlichkeit beitragen würde.
No comment.
- Sven Rautenberg
Hi,
Und du hantierst immer noch mit DM-Preisen herum... unglaublich.
ALTER TABLE tblartikel ADD COLUMN eurpreis double;
UPDATE tblartikel SET eurpreis = dmpreis/1.95584;
Das mit dem DEM und EUR war nur ein Beispiel, um die Problematik hier zu illustrieren und nicht die Originalabfrage posten zu müssen. Mir ist halt auf Anhieb nix besseres eingefallen.
Im konkreten Fall sind die Berechnungen nämlich etwas umfangreicher, so dass das mit dem AS erheblich zur Übersichtlichkeit beitragen würde.
No comment.
???
wunderwarzenschwein
Moin!
Und du hantierst immer noch mit DM-Preisen herum... unglaublich.
ALTER TABLE tblartikel ADD COLUMN eurpreis double;
UPDATE tblartikel SET eurpreis = dmpreis/1.95584;Das mit dem DEM und EUR war nur ein Beispiel, um die Problematik hier zu illustrieren und nicht die Originalabfrage posten zu müssen. Mir ist halt auf Anhieb nix besseres eingefallen.
Dann kennzeichne sowas doch auch bitte ganz deutlich als "ausgedachtes Beispiel - nur zur Verdeutlichung". Dann ist klar, dass man sich nur schematisch auf den Code einlassen muß, und nicht konkret.
Mein Lösungsansatz gilt aber dennoch.
- Sven Rautenberg
Hi,
Dann kennzeichne sowas doch auch bitte ganz deutlich als "ausgedachtes Beispiel - nur zur Verdeutlichung". Dann ist klar, dass man sich nur schematisch auf den Code einlassen muß, und nicht konkret.
Sorry. Werd ich nächstes Mal deutlicherer machen.
Mein Lösungsansatz gilt aber dennoch.
Hm. Ich bräuchte das aber für eine Funktion (in Perl), die ein SQL-Statement anhand einer Feldliste generiert. Da ist die Voraussetzung einer bestimmten Spalte hinderlich.
Hintergrund ist: Ich will zu einem bestimmten Datensatz anhand einiger numerischer Variablen einen möglichst ähnlichen anderen Datensatz rausfiltern. Dazu will ich jeweils die Korrelation zwischen den beiden Datensätzen berechnen. Dafür brauch ich u.a. die Standardabweichung über alle Felder eines Datensatzes (1. Berechnung), die dann für den Korrelationskoeffizienten (2. Berechnung) verwendet wird.
wunderwarzenschwein
Moin!
Hintergrund ist: Ich will zu einem bestimmten Datensatz anhand einiger numerischer Variablen einen möglichst ähnlichen anderen Datensatz rausfiltern. Dazu will ich jeweils die Korrelation zwischen den beiden Datensätzen berechnen. Dafür brauch ich u.a. die Standardabweichung über alle Felder eines Datensatzes (1. Berechnung), die dann für den Korrelationskoeffizienten (2. Berechnung) verwendet wird.
Du hast offenbar eine Tabellengestaltung, die die Verwendung der Funktion STD() nicht erlaubt (weil das GROUP BY erfordert).
Aber was hindert dich, die Standardabweichung der in einem Datensatz enthaltenen Werte in einer weiteren Spalte zu speichern? Entweder hast du genug Rechenpower, um _zweimal_ die Standardabweichung zu berechnen, oder du hast genug Speicherplatz, um diese Zusatzangabe, die sich ja nur ändert, wenn sich der Datensatz ändert (also grundsätzlich ins Update-Statement gehören könnte), extra abzuspeichern.
Was du mit deiner Feldliste da willst, sagt mir nicht viel. Gewisse Dinge müssen festgelegt werden, sei es der Name der Datenbank, der Tabelle oder der gewünschten Spalten. Du mußt sie also sowieso wissen.
Das ganze fällt natürlich ins Wasser, wenn die Standardabweichung auch noch Werte von außen einbeziehen muß - obwohl es da sicherlich Möglichkeiten gibt, einen vorberechneten Wert mit dynamischen Daten zu kombinieren.
- Sven Rautenberg