为了账号安全,请及时绑定邮箱和手机立即绑定

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"])但这给了我所有买卖交易。我设置的方式是,当用户卖出股票时,股票栏将为负数。在这一点上,我在代码中组织数据变得非常混乱。但我不确定是否应该添加另一个数据库,因为我还必须在我的代码中分别插入和查询该数据库。是否有一个命令可以让我将买卖交易分成两个单独的表?
查看完整描述

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 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信