这是一个问题:
经理要求您检索所有>少于150美元或超过300加拿大加拿大美元的产品的名称和价格。使用单个查询检索此用例所需的结果,并捕获查询及其执行的屏幕截图。确保以加拿大美元格式化结果。加拿大美元的货币符号与美元相同," $"符号
我正在使用Oracle SQL开发人员,这是我的查询:
SELECT product_name,
to_char(price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar'),
'FML9999.00','NLS_CURRENCY= $')AS price_in_canadian_dollars
FROM Product
WHERE price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar')<= 150
OR (SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar') >= 300;
如果我执行此操作,我只能获得低于150美元的价格。我如何更改此格式,以便可以使产品显示为&lt;150加元或> 300加元,同时?
您忘了在> = 300案例中乘以Price_in_us_dollars将汇率乘以。
SELECT product_name,
to_char(price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar'),
'FML9999.00','NLS_CURRENCY= $')AS price_in_canadian_dollars
FROM Product
WHERE price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar')<= 150
OR price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar') >= 300;
在第二子句(或...)中,您错过了Price_in_use_dollars的乘法。您的比较大于汇率,这不太可能匹配: - )
您可能会考虑的其他优化: - 不使用之间,因此您只需要进行一次计算即可; - 将计算移至右侧,因此您可以从Price_in_us_dollars上的索引中受益
这两个是相互排斥的 - 如果将计算移到右边,则必须对两者之间的每个参数重复。