SQLite:在计算中使用别名

SQLite:在计算中使用别名,sqlite,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'

可以在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的代码重复了两次。我一直在搜索如何在计算列中使用别名,但是,我的尝试没有结果

在计算中直接使用别名(sumDiv)会导致错误消息。我已经读到,将别名包装在SELECT语句周围应该可以:

(SELECT sumDiv)/dpClose AS divYield
此尝试会导致相同的错误:

bash-3.2$ sqlite3 myShares < Queries/test.sql
Error: near line 1: no such column: sumDiv
bash-3.2$sqlite3 myShares
可以在计算中使用别名,还是必须重复代码两次

提前感谢您的反馈,并帮助您逐步了解SQLite的学习过程

致以最良好的祝愿


GAM

SQL标准规定别名在同一SELECT子句的其他部分不可见

计算机科学中的所有问题都可以通过另一个间接层次来解决。
-大卫惠勒

只需将计算移动到子查询中:

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