2016-04-25 7 views
0

Kann ein Alias ​​in einer berechneten Spalte in SQLite verwendet werden? Ich habe die folgende Abfrage:SQLite: Verwendung von Aliasen in Berechnungen

SELECT 
    dpTicker AS Ticker, 
    max(dpDate) AS Datum, 
    dpClose AS Price, 
    (SELECT 
     sum(div) 
    FROM Dividends 
    WHERE 
     divTicker = DP1.dpTicker 
     AND strftime('%Y', divDate) = strftime('%Y', date('now','-1 Year'))) 
    AS sumDiv, 
    (SELECT 
     sum(div) 
    FROM Dividends 
    WHERE 
     divTicker = DP1.dpTicker 
     AND strftime('%Y', divDate) = strftime('%Y', date('now','-1 Year')))/dpClose*100 
    AS divYield  
FROM DailyPrices AS DP1 
GROUP BY dpTicker 
ORDER BY divYield DESC; 

Wie Sie in der obigen Abfrage feststellen kann, wird der Code für sumDiv wird zweimal wiederholt. Ich habe gesucht, wie man Aliase in berechneter Spalte verwendet, jedoch waren meine Versuche unfruchtbar.

Die direkte Verwendung des Alias ​​(sumDiv) in einer Berechnung führt zu einer Fehlermeldung. Ich habe gelesen, dass um eine SELECT-Anweisung den Alias ​​Umwickeln sollte funktionieren:

(SELECT sumDiv)/dpClose AS divYield 

Dieser Versuch führt zu den gleichen Fehler:

bash-3.2$ sqlite3 myShares < Queries/test.sql 
Error: near line 1: no such column: sumDiv 

Kann Aliase in der Berechnung verwendet werden, oder muss ich das wiederholen zweimal codieren?

Vielen Dank im Voraus für jede Rückmeldung und helfen, die SQLite Lernkurve zu kriechen.

Mit freundlichen Grüßen,

GAM

Antwort

0

Der SQL-Standard besagt, dass Aliase in anderen Teilen der gleichen SELECT-Klausel nicht sichtbar ist.

All problems in computer science can be solved by another level of indirection.
— David Wheeler

Bewegen Sie einfach die Berechnung in einer Unterabfrage:

SELECT sumDiv, 
     sumDiv/dpClose AS divYield 
FROM (SELECT (SELECT sum(div) 
       FROM Dividends 
       WHERE ... 
      ) AS sumDiv, 
      ... 
     FROM DailyPrices 
     ...); 
Verwandte Themen