Spalte bei einer Berechnung verwenden

Ralph Schröder

Neuer Benutzer
Beiträge
4
Hallo,

ich glaube jetzt kommen einen Anfängerfrage:

Ich möchte gerne im SELECT eine berechnete Spalte wieder verwenden.

SELECT SPALTE1+SPALTE2 AS GESAMT, GESAMT*3

Ich berechne Spalte Gesamt und möchte dann diesen Wert mit 3 multiplizieren.

Meine Berechnung von Spalte GEsamt ist komplizierter, und deshalb möchte ich den berechneten Wert GESAMT weiterverwenden.
 
Werbung:
Z.b mit einer sog. derived table:

Code:
select gesamt, gesamt * 3
from (
    select spalte1 + spalte2 as gesamt
    from ...
) as t
 
Du kannst dich innerhalb eines Selects nicht auf Spalten beziehen, die quasi zur Laufzeit des Selects erst erzeugt werden - der kennt die quasi noch nicht. Das betrifft auch GROUP BY, ORDER BY, etc.

Du kannst aber wie bei @castorp eine Abfrage wie eine Tabelle verwenden und so Code Redundanzen abbauen und Übersichtlichkeit steigern. Wenn du dich mehrfach auf die Abfrage in FROM beziehen willst/musst, dann lohnt sich ein Blick auf die WITH-Syntax.
Code:
WITH t AS (
select spalte1 + spalte2 as gesamt
from ...
)
select gesamt, gesamt * 3
from t
 
In Access konnte ich in der SQL Abfrage Ergebnis laufender Spalten verwenden.

Ich dachte es ist vielleicht auch möglich. Muss ein paar Abfragen von Access umsetzen.


Ich bedanke mich bei Allen und wünsche ein schönes Wochenende
 
In Access konnte ich in der SQL Abfrage Ergebnis laufender Spalten verwenden.
Das ist praktisch und sowas wünsche ich mir für richtige DB auch oft.
Ich hab keine Ahnung, warum es das nicht oder selten gibt. Vielleicht gibt es technische Gründe dafür oder man sagt seitens der Hersteller einfach, komm schon, sei nicht so faul, mach halt eine With Clause dafür oder eine Derived Table. (Es ist ja wirklich nicht viel Tipparbeit, eher copy/paste)
 
Sorry, so ging es aber:

Code:
```
select version();
```
| version() |
|:----------|
| 8.0.36 |
```
CREATE TABLE v (
  g1 int,
  g2 int
  );
```


```
INSERT INTO v VALUES(1,2);
```


```
SELECT @g:=g1+g2 as gx, @g *5 AS G_total FROM v;
```
| gx | G_total |
|---:|--------:|
| 3 | 15 |

[fiddle](https://dbfiddle.uk/gyNVSQUp)

zumindest in MySQL / MariaDB :-(
 
Zuletzt bearbeitet:
Der Ordnung halber:
Das (#9) sind Variablen, die in dieser Form (nur?) von mySQL genutzt werden. Auch ein cooles Feature finde ich. An einigen Stellen kann man sich damit in mySQL sogar den A.. retten, wenn nichts anderes geht. Aber es ist nirgendwo(?) wiederverwendbar.
Und das hatten wir an einer anderen Ecke gerade: Die Wiederverwendbarkeit (Standardkonformität) ist ja kein Selbstzweck. Dann kann man schon gleich darüber diskutieren, was ist jeweils über den Standard hinaus geht (Erweiterung) und was gegen den Standard läuft oder gar nicht erfüllt wird.

Und dann gibt es noch die Anwendungen über den DB (Standardanwendungen bzw. etablierte Produkte am Markt). Da ist es schon eine große Frage, ob man- wie ebenfalls nebenan gerade erwähnt- eine Wahrenwirtschaft nur mit einer DB betreiben kann oder ob diese Anwendung mit verschiedenen Produkten betrieben werden kann. Wen interessiert das? Jemand der auf einem System mehr Know-How hat, jemand der feststellt, das ein bestimmtes System performanter ist, jemand der die gleiche Leistung für kein Geld bekommen kann....

Ich denke, ohne dass ich da intime Einblicke habe, die Standards werden von Gremien festgelegt, die nicht unbedingt ganz unabhängig sind. (Würde natürlich niemand zugeben, ist also eine Verschwörungstheorie :) ) Der Standard ist also auch sagen wir eine Frage der Marktmacht oder Strategie des Herstellers.
Coole Features sind demnach nicht unbedingt standardkonform, aber sexy und Entwickler mögen das oder eben nicht.

Zu der Frage im Thread würde ich sagen, sie ist ein gutes Beispiel dafür, wie man mit dem falschen (Start-)System falsche Vorstellungen entwickelt. Spannend fände ich eigentlich nach wie vor die Frage, ob es technische Gründe für dieses "Phänomen" gibt.
 
Eventuell noch interessant zu wissen:
Bei MSSQL kann ich im ORDER BY die Nummer der Spalte verwenden. Damit kann ich auch eine berechnete Spalte verkürzt aufführen. Hat aus meiner Sicht aber nichts im produktiven Code zu suchen, ist schlimmer als irgendwo SELECT *.
 
Werbung:
Das ist schon so ne Art Galgenhumor oder? ;-)
Hallo dabadepdu,

nein !, das war mein Ernst. Ich befasse schon sehr lange mit Datenbanken und halte MySQL / MariaDB für eine sehr gute DB. So sehen das auch einige anderen Firmen wie Flickr,YouTube,Facebook und Twitter, die dies auch produktiv einsetzen.

Ob was was zu welchem System kompatibel ist, ist mir relativ egal. Es gibt immer Neuerungen und diese nicht zu realisieren weil es in irgend einem Standard definiert ist, halte ich schlicht weg für einen SHOW STOPPER.

Und OPEN SOURCE bedeutet ja auch nicht KOSTENLOS. Wenn man so etwas im Produktiv-Betrieb einsetzt sollte man schon einen Servicevertrag haben.

Die Anfragen die ich hier sehe sind meist von Benutzern gestellt die ihre HP damit betreiben wollen oder erste Schritte damit machen. Ich glaube das die meisten das Risiko gar nicht einschätzen können und damit meine ich nicht nur die DB.

Schau nur mal wie viele ein Backup machen oder dies auch prüfen ob es sich wieder fehlerfrei einspielen lässt bzw. was es für das Unternehmen bedeutet wenn die Seite mal einige Tage im Netz nicht erreichbar ist,

Fazit: Es gibt viele verschiedene DB - Systeme. Man muss halt schauen welches das richtige ist und welche Know How man im Unternehmen hat oder braucht. Fehler haben alle !!

LG Bernd

 
Zurück
Oben