亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQLite 如何按列值分隔表?

SQLite 如何按列值分隔表?

慕容3067478 2021-06-25 18:41:33
我正在用 Flask 編寫一個簡單的股票交易網站,同時學習如何使用 SQLite 數據庫。當登錄用戶進行交易(買入/賣出)時,我transactions使用以下命令將其插入到數據庫中:db.execute("INSERT INTO transactions (user_id, symbol, shares, price) VALUES (:user_id, :symbol, :shares, :price)",           user_id=session["user_id"], symbol=symbol, shares=shares, price=price)如果用戶想查看他們當前擁有的股票,我只需從數據庫中查詢:trades = db.execute("SELECT * FROM transactions WHERE user_id = :user_id ORDER BY transaction_id ASC",                    user_id=session["user_id"])但這給了我所有買賣交易。我設置的方式是,當用戶賣出股票時,股票欄將為負數。在這一點上,我在代碼中組織數據變得非?;靵y。但我不確定是否應該添加另一個數據庫,因為我還必須在我的代碼中分別插入和查詢該數據庫。是否有一個命令可以讓我將買賣交易分成兩個單獨的表?
查看完整描述

3 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

如果您只想顯示購買訂單,您只需要select通過獲取所有shares為正的行來過濾查詢


trades = db.execute("

    SELECT * FROM transactions 

    WHERE user_id = :user_id AND shares > 0 

    ORDER BY transaction_id ASC",

    user_id=session["user_id"]

)

但是,如果您想顯示每個股票/品種的總持有量,您可以使用group by子句并對shares列求和。


holdings = db.execute("

    SELECT id, symbol, SUM(shares) 

    FROM transactions 

    WHERE user_id = :user_id

        AND SUM(shares) > 0 -- Edit: Added this so it will only show stocks you own

    GROUP BY symbol 

    ORDER BY transaction_id ASC",

    user_id=session["user_id"]

)

旁注:我相信id你的第二個select查詢是錯誤的,你的意思是user_id(在WHERE id = :user_id部分)。


查看完整回答
反對 回復 2021-06-29
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

你不能只是:

SELECT * FROM transactions WHERE id = :user_id and shares > 0 ORDER BY transaction_id ASC

獲得他們擁有的股份,然后shares < 0獲得他們出售的股份?


查看完整回答
反對 回復 2021-06-29
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

您可以運行兩個查詢insert into select ...。請參閱有關如何執行此操作的 SO 問題。

您只需要為賣出交易運行第一個,為買入交易運行另一個。


查看完整回答
反對 回復 2021-06-29
  • 3 回答
  • 0 關注
  • 257 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號