我有一個 SQLite 表,其中包含不同貨幣的買賣價格。就像是
CREATE TABLE ins_and_outs
(
prod_id INTEGER NOT NULL,
buy_price DECIMAL,
buy_currency TEXT,
buy_currency_EUR DECIMAL NOT NULL,
sell_price DECIMAL,
sell_currency TEXT,
sell_currency_EUR DECIMAL
)
我需要計算
- 歐元的買入和賣出價格(乘以 2 列);
- 然后取之前的值并計算差值(利潤)
- 最后取差額和計算的買入價值并計算利潤%
假設這需要參考計算值來計算下一個值
SELECT buy_price * buy_currency_EUR AS buy_Eur, sell_price * sell_currency_EUR AS sell_Eur, sell_Eur - buy_Eur AS profit, profit / buy_Eur * 100 AS pct
只有這不被接受,如果我能找到更好的解決方案,我不想在每一列中重復計算。
當然,這可以很容易地將 SQL 輸出分配給外部陣列或物件,但我正在考慮使用一個或多個視圖在資料庫中進行所有操作。
我看了一下 using sub-queries,但是我需要從子查詢中與主查詢相同的表行中獲取值,鑒于我找到的所有示例,我不知道該怎么做在子查詢中使用固定值或其他表中的值。我還在考慮使用子查詢的解決方案會使 SQL 陳述句在未來很難閱讀和排除故障。
一種替代方法是創建 2 個視圖,第一個以 Eur 計算售價,第二個視圖將第一個作為輸入并計算其余部分。這行得通嗎?此外,嵌套視圖可以一直更新回原始表嗎?
Another alternative would be to add the calculated columns to the table and trigger the calculations on UPDATE. This would use more disk space but require less CPU every time the data is accessed.
Most importantly, what would be the best solution for this case?
uj5u.com熱心網友回復:
因此,正如查詢陳述句部分的注釋中所述SELECT,您不能重用您在此處定義的別名:
SELECT buy_price * buy_currency_EUR AS buy_Eur, -- buy_Eur is an alias not a column
sell_price * sell_currency_EUR AS sell_Eur -- same here,
sell_Eur - buy_Eur AS profit,
profit / buy_Eur * 100 AS pct
FROM yourTable
因此,為了解決您的問題,最簡單的方法是重復計算并確保使用括號:
SELECT buy_price * buy_currency_EUR AS buy_Eur,
sell_price * sell_currency_EUR AS sell_Eur,
(sell_price * sell_currency_EUR) - (buy_price * buy_currency_EUR) AS profit,
(((sell_price * sell_currency_EUR) - (buy_price * buy_currency_EUR)) / (buy_price * buy_currency_EUR) * 100) AS pct
FROM yourTable
另一種方法是使用子查詢,但是您需要的不止一個,這沒有意義恕我直言(我將只顯示一個級別):
SELECT buy_Eur, sell_Eur,
sell_Eur - buy_Eur as profit,
(sell_Eur - buy_Eur) / buy_Eur * 100 as pct
FROM (
SELECT buy_price * buy_currency_EUR AS buy_Eur,
sell_price * sell_currency_EUR AS sell_Eur
FROM yourTable
) as sub -- you need to name (alias) your subquery
編輯:另一種選擇是創建查詢視圖并像簡單表一樣查詢它:
CREATE VIEW yourViewName as
SELECT buy_price * buy_currency_EUR AS buy_Eur,
sell_price * sell_currency_EUR AS sell_Eur,
(sell_price * sell_currency_EUR) - (buy_price * buy_currency_EUR) AS profit,
(((sell_price * sell_currency_EUR) - (buy_price * buy_currency_EUR)) / (buy_price * buy_currency_EUR) * 100) AS pct
FROM yourTable;
然后只需使用:
select buy_Eur, sell_Eur, profit, pct
from yourViewName
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/422613.html
標籤:
