【问题标题】:I am attempting to sum two tables within themselves and then subtract the one table from the other. h我试图将两个表相加,然后从另一个表中减去一个表。 H
【发布时间】:2017-06-29 16:20:16
【问题描述】:

我正在尝试将两个表相加并从另一个表中减去一个。通过查询,我可以将两个表相加,但无法减去它们。正在 Postgres 中尝试以下是表格:

 memberid   ticker  numshares   purchasedate    transactionid   purchaseprice
7   aapl    1   Jun 28, 2017    22  146
7   aapl    1   Jun 28, 2017    23  146
7   hog     1   Jun 28, 2017    24  55
7   aapl    10  Jun 28, 2017    25  1458
7   aapl    2   Jun 28, 2017    26  292
7   aapl    3   Jun 28, 2017    27  437
7   aapl    5   Jun 28, 2017    28  729

这是销售表:

memberid    ticker  numshares   selldate    sellid  sellprice
7   aapl    10  Jun 28, 2017    4   1458
7   aapl    15  Jun 29, 2017    5   2154

更新:我得到了一切工作除了一个细节与以下 Postgres 声明:

`select qbuys.ticker, qbuys.total_purchaseprice-qsells.total_sellprice 
as current_total, qbuys.total_purchaseshares-qsells.total_sellshares as 
current_shares
from
(select sells.ticker, sum(numshares) as total_sellshares, 
sum(sellprice) as total_sellprice
from sells
where memberid = 7
group by ticker) as qsells, (select stocks.ticker, sum(numshares) as        
total_purchaseshares, sum(purchaseprice) as total_purchaseprice from 
stocks 
where memberid = 7
group by ticker) as qbuys
where qbuys.ticker=qsells.ticker`

剩下的唯一问题是,这不会返回没有相应销售的购买。只有在每张桌子上都有相同代码的买入和卖出时,它才会吐出总数。所以我需要的更新是让这个没有相应销售的购买吐出。

【问题讨论】:

  • 什么问题?你试过这样做吗?它不工作吗?错误是什么?
  • 我可以使用与上述 SQL 语句类似的语句将这些表汇总在一起。我无法从购买表中减去销售表。
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 我正在使用 Postgres
  • @JoshuaWilcken 我的意思是,如果您说“我遇到问题”或“我遇到麻烦”,那么您需要告诉我们什么问题是,即:什么都没有发生?你有错误吗?你得到一个结果,但它是错误的?电脑会爆炸吗?在不知道问题是什么的情况下,人们只能推测,这并不能产生有用的线索。

标签: sql postgresql


【解决方案1】:

您需要连接两个表才能从另一列中减去一列的总和。

SELECT
a.ticker
,sum(a.numshares) as Total_Sell_Shares
,sum(a.sellprice) as Total_Sell_Price
,sum(a.numshares) - sum(b.numshares) as Total_Shares
,sum(a.sellprice) - sum(b.purchaseprice) as Total_Price
FROM Sells A
JOIN Stocks B on a.ticker = b.ticker
GROUP BY a.ticker

【讨论】:

  • 我编辑了这个查询以更好地适应我现有的表。此查询按我的意愿工作,只是它不返回没有销售的购买。例如,如果我只购买了 70 股 AMZN 股票,但从未出售过任何 AMZN,那么它不会归还我的 AMZN 股票。如果您对这方面有任何想法,我们将不胜感激。
【解决方案2】:

首先,带有数据的示例架构(在 postgres 中):

derek=# create table t1 (ticker varchar, numshares integer);
CREATE TABLE
derek=# create table t2 (ticker varchar, numshares integer);
CREATE TABLE
derek=# insert into t1 values ('aapl',10);
INSERT 0 1
derek=# insert into t1 values ('aapl',5);
INSERT 0 1
derek=# insert into t2 values ('aapl',3);
INSERT 0 1

然后诀窍是对每个聚合函数使用内部查询:

derek=# select t1a.ticker, buys, sells, buys-sells as position 
from (select ticker, sum(numshares) as buys from t1 group by ticker) as t1a 
join (select ticker, sum(numshares) as sells from t2 group by ticker) as t2a 
on t1a.ticker=t2a.ticker;
 ticker | buys | sells | position 
--------+------+-------+----------
 aapl   |   15 |     3 |       12
(1 row)

【讨论】:

    【解决方案3】:

    我会尝试这样的事情。你怎么看?

    select stocks.ticker, sum(stocks.numshares) - sum(sells.numshares) as total_shares, 
            sum(stocks.purchaseprice) - sum(sells.sellprice) as total_price 
    from stocks 
    left join sells
        on stocks.ticker = sells.ticket
    where stocks.memberid = 7
    group by stocks.ticker;
    

    【讨论】:

    • 天哪,这太接近了。它正在返回一些东西,但不完全是。我只是稍微更新了你的。选择stocks.ticker, sum(stocks.numshares) - sum(sells.numshares) 作为total_shares, sum(stocks.purchaseprice) - sum(sells.sellprice) 作为来自股票的total_price 左加入在stocks.ticker = sells.ticker 上销售stocks.memberid = 7 按stocks.ticker 分组;结果给了我 aapl 的 -106 total_sharesshares 和 -15256 total_price
    • @JoshuaWilcken 我已根据您的评论对其进行了更新。下次随意编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2015-07-06
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    相关资源
    最近更新 更多