首页 > 解决方案 > 找到最高总价并转换

问题描述

因此,我必须使用一个查询,在其中列出交易 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、shares、stock_ex_id FK1、price_total)

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)

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

标签: sqloraclejoingroup-byaggregate-functions

解决方案


但是您可以先查看您的 select max 查询返回的内容,然后按该值过滤交易表。通过您的所有表格跟踪这一点,以查看您的交易表格上的数据不在其他表格上的位置。

或者将您的 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

推荐阅读