2016-04-25 10 views
0

エイリアスをSQLiteの計算列に使用できますか?私は次のクエリを持っています:SQLite:計算でのエイリアスの使用

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; 

上記のクエリで分かるように、sumDivのコードは2回繰り返されます。私は計算列でエイリアスを使用する方法を探していましたが、私の試みは実りありませんでした。

エイリアス(sumDiv)を計算で直接使用すると、エラーメッセージが表示されます。私は、SELECT文の周りにエイリアスをラップすることは動作するはずです読んだことが:

(SELECT sumDiv)/dpClose AS divYield 

同じエラーでこの試みの結果:

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

は計算にエイリアスを使用することができ、あるいは私が繰り返さなければならないのですが2回コード?

フィードバックをお寄せいただきありがとうございます。また、SQLite学習曲線をアップグレーディングするのに役立ちます。

敬具、

GAM

答えて

0

SQL標準では、エイリアスは、同じSELECT句の他の部分に表示されていないことを言います。

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

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

ちょうどサブクエリに計算を移動します

関連する問題