错误的查询输出时使用where和具有相同的SQL语句
问题描述:
select CURRENCY.currencyname, currency.currencysymbol, COUNTRYNAME.currencycode,
currency.exchangerate
from CURRENCY,COUNTRYNAME
where currency.currencycode=COUNTRYNAME.currencycode
having currency.exchangerate >= max(currency.exchangerate)
group by CURRENCY.currencyname, currency.currencysymbol,
COUNTRYNAME.currencycode, currency.exchangerate;
这是我得到的输出,我知道是错误的,因为我试图只显示最大的汇率将是。所以任何帮助解决这个查询将非常感激。我的Oracle SQL Developer错误的查询输出时使用where和具有相同的SQL语句
CURRENCYNAME CURRENCYSYMBOL CURRENCYCODE EXCHANGERATE
-------------------- -------------------- ------------ ------------
British Pound £ GBP 1,
US Dollar $ USD 1.9626 ,
Danish Krone kr DKK 9.9918 ,
Malaysian Ringgit RM MYR 6.35392 ,
Euro € EUR 1.34076 ,
Indian Rupee Rs INR 77.3265 ,
Japanese Yen ¥ JPY 209.881,
答
请尝试以下
SELECT CURRENCY.currencyname, currency.currencysymbol,
COUNTRYNAME.currencycode, MAX(currency.exchangerate) as ExchangeRate
FROM CURRENCY
INNER JOIN COUNTRYNAME ON COUNTRYNAME.currencycode = currency.currencycode
GROUP BY CURRENCY.currencyname, currency.currencysymbol, COUNTRYNAME.currencycode;
答
关于您的查询......
1
。您无法将MAX(聚合)值与同一查询级别的基准值进行比较。您可以使用派生表(也称为“子查询”),例如
select c.currencyname, c.currencysymbol, n.currencycode, c.exchangerate from CURRENCY c join COUNTRYNAME n on c.currencycode=n.currencycode where c.exchangerate = (select max(exchangerate) from currency)
2
。从上面你会注意到我使用了JOIN来连接这两个表。大约21年前,随着ANSI-92连接语法的出现,使用表名的逗号列表变得不合时宜。
3
。显示的查询无法工作。 GROUP BY
子句属于HAVING
子句之前,而不是之后。话虽如此,上面的第一点适用,无论如何您都无法将MAX值与(基准)列值进行比较。
+0
感谢队友完美对不起我推出了逗号列表只是一个打字错误 – 2013-04-20 11:31:16
答
该查询可能可以简化为:
select max(currencyname), max(currencysymbol), currencycode, max(exchangerate)
from currency group by currencycode
( - 假设没有那些从未使用过任何国家的货币)
什么是你应该做的? – 2013-04-20 10:55:36
与_trying显示_它正在做什么它在选择.. – dbf 2013-04-20 10:56:17
选择'max(currency.exchangerate)'怎么样? – 2013-04-20 11:01:35