【发布时间】:2019-04-11 21:24:39
【问题描述】:
我有两张桌子: 1) 买入,2) 股票
ticker | buy_or_sell | date | price | num_of_shares |
+--------+-------------+------------+-----------+-------+--
| IBM | BUY | 2019-03-20 | 273.0 | 1100 |
| IBM | BUY | 2019-03-21 | 271.0 | 2400 |
| IBM | SELL | 2019-03-22 | 270.5 | 2500 |
| GOOG | BUY | 2019-03-20 | 86.0 | 2200 |
| GOOG | SELL | 2019-03-20 | 87.0 |1000 |
| GOOG | SELL | 2019-03-21 | 87.5 |1000 |
| GOOG | BUY | 2019-03-21 | 87.0 | 800 |
| GOOG | SELL | 2019-03-22 | 86.0 | 1000 |
| AAPL | BUY | 2019-03-20 | 99.0 |1000 |
| AAPL | BUY | 2019-03-20 | 99.5 | 1000 |
| AAPL | BUY | 2019-03-21 | 100.0 |1000 |
| AAPL | SELL | 2019-03-22 | 103.0 |3000 |
| MSFT | BUY | 2019-03-20 | 186.0 | 1500 |
| MSFT | SELL | 2019-03-21 | 188.0 |1000 |
| MSFT | BUY | 2019-03-22 | 187.0 |5000 |
| ticker | exchange |
+--------+----------+
| AAPL | NASDAQ |
| GOOG | NASDAQ |
| MSFT | NASDAQ |
| IBM | NYSE |
| UNH | NYSE |
我想找到以下日期:'AAPL' 的价格 * 股票数量,其中 buy_or_sell = SELL 高于公司在 'NASDAQ' 购买的 (buy_or_sell = BUY)。我不想使用任何自然连接。
我有实现此目的的查询,但我不知道如何正确组合它们。所以我有:
SELECT distinct A.date, A.ticker, SUM(A.price*A.num_of_shares) AS ‘TOTAL’
FROM BUYnSELL A, STOCK S
WHERE A.ticker='AAPL' AND A.buy_or_sell = 'SELL' AND A.ticker = S.ticker
GROUP BY A.date, A.ticker;
^这仅返回苹果的日期、股票代码和总价*股数
还有这个:
SELECT distinct B.date, SUM(B.price*B.num_of_shares) AS 'BTOTAL'
FROM BUYnSELL B, STOCK T
WHERE B.ticker = T.ticker AND B.buy_or_sell = 'BUY' AND T.exchange = 'NASDAQ'
GROUP BY B.date, B.ticker;
^这返回日期和总价格*仅在纳斯达克购买的任何股票的数量
有谁知道我可以如何组合这两个查询,以便在第一个查询中的总数大于第二个查询中给出的值时返回日期?
因此,只有日期 2019-03-22 应该返回,因为当天售出的苹果价值高于第二个查询返回的任何值。
SQL 新手,欢迎提出任何建议!
【问题讨论】:
标签: mysql sql group-by comparison