我正试图回到SQL查询和我有一个令人沮丧的问题。
我尝试获取数据集中的所有项目,并按分区对它们进行排名。我研究了一下,觉得应该是这样的:
select g.ticker, g.sector, g.industry, g.countryname, g.exchange, c.carbon, c.year,
ROW_NUMBER() OVER (
PARTITION BY g.sector, g.industry, g.countryname, g.exchange
ORDER BY c.carbon DESC
) AS 'Rank'
from "General" g
INNER JOIN carbon c ON upper(c.ticker) =g.ticker ;
输出将是分区中每个组的排名,在这种情况下,它将是部门,行业,国家名称和交易所,然后根据其碳排放量对行进行排名。
我得到这个错误:
Error occurred during SQL script execution
Reason:
SQL Error [42601]: ERROR: syntax error at or near "'Rank'"
Position: 1305
如果我删除rank部分,数据连接并提供结果(显然不是我想要的排名,但我知道基本查询工作)。我做错了什么?
第二个(相关)问题,我忘了我有多讨厌SQL错误消息。上面的错误告诉我有一个语法错误,然后我去了文档,在我的代码和他们的例子中看不到任何不同。假设缺乏经验,是否有更好的方法来获得可操作的错误消息(即在Python中,我得到一个堆栈跟踪,我可以读取它来查看代码的哪一部分出错了)?
1条答案
按热度按时间jgwigjjp1#
不要对列别名使用单引号。另外,我建议避免任何属于标准SQL的内容(它有一个
rank()
函数)。我经常使用seqnum
:注意:字符串和日期常量只能使用单引号。如果要转义列名,请使用双引号(就像查询对表名
General
所做的那样)。