找到最高的总价格并进行转化

时间:2018-06-29 01:44:26

标签: sql oracle join group-by aggregate-functions

因此,我必须使用一个查询,在其中列出交易ID的股票ID,以及将总价格转换为美元的总价(最高价)。

SELECT 
tr.trade_id, tr.stock_id, round(tr.price_total * con.exchange_rate,2) 
as "US Dollars"

from trade tr
 JOIN stock_exchange se
on se.STOCK_EX_ID = tr.STOCK_EX_ID

 JOIN currency curr
on curr.CURRENCY_ID = se.currency_id

JOIN conversion con
on con.from_CURRENCY_ID = curr.CURRENCY_ID

WHERE (tr.PRICE_TOTAL) = (Select Max(price_total) from trade) and curr.name = 
'Dollar' and tr.stock_ex_id is not NULL
group by tr.trade_id, tr.stock_id, round(tr.price_total), tr.price_total, 
round(tr.price_total * con.exchange_rate,2); 

交易(trade_id PK,stock_id FK2,transaction_time,股票,stock_ex_id FK1,总价格)

Stock-exchange( stock_ex_id PK, name, symbol, currency_id FK1)

conversion( from_currency_id PK, to_currency_id)

currency ( currency_id PK, name, symbol

expected output should be -

trade_id - 1 stock_id 1, price (non conversion) (225000000)

我不确定为什么在输出中什么也没得到。有什么建议可以解决这个问题吗?抱歉,如果我没有正确设置问题的格式

2 个答案:

答案 0 :(得分:0)

但是您可以先查看您选择的最大查询返回的内容,然后根据该值过滤交易表。跟踪所有表,以查看交易表上的数据不在其他表上的位置。

或者将您的curr.name条件与联接放在一起,并为最后两个表指定LEFT JOIN,以查看数据是否丢失,如下所示:

SELECT tr.trade_id
    ,tr.stock_id
    ,round(tr.price_total * con.exchange_rate, 2) AS "US Dollars"
FROM trade tr 
LEFT JOIN stock_exchange se 
    ON se.STOCK_EX_ID = tr.STOCK_EX_ID 
LEFT JOIN currency curr 
    ON curr.CURRENCY_ID = se.currency_id
    AND curr.name = 'Dollar' 
LEFT JOIN conversion con 
    ON con.from_CURRENCY_ID = curr.CURRENCY_ID
WHERE (tr.PRICE_TOTAL) = (SELECT Max(trm.price_total) FROM trade trm)
    AND tr.stock_ex_id IS NOT NULL

答案 1 :(得分:0)

也可能是其他事情,但是值得一看的是这个

您说WHERE tr.PRICE_TOTAL =(从交易中选择Max(price_total) AND curr.name ='美元'

如果最大价格总额的交易不是美元,那么您将一无所获。

您需要更改“从交易中选择最高价(总价)”以仅获取美元交易的最大值,或者在子查询中获取所有有效交易,然后从中获取最大值。


在下面的注释之后-调试-运行“从交易中选择*,其中price_total =(从交易中选择Max(price_total))”,以获取有效的交易记录。然后查看它们-它们将在某处失败-交易中没有STOCK_EX_ID,或者其他联接之一失败-您需要从已知数据开始然后从那里开始。