我sales
的{{1}}记录year
如下所示:
id year sales
1 2001 10
2 2002 20
3 2003 30
为了从一年到下一年获得sales_difference
,我正在加入自己的桌子:
SELECT s1.*, s1.sales - s2.sales AS sales_difference
FROM sales s1, sales s2
WHERE s1.year = s2.year + 1
此查询运行速度非常慢,因此我想在year + 1
上创建索引。根据{{3}},您可以在表达式上创建索引,例如:
CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
所以我尝试这样做:
CREATE INDEX sales_year_plus_one on sales (year + 1);
给了我:
ERROR: syntax error at or near "+"
LINE 1: ...sales_year_plus_one on sales (year + 1);
^
为什么不允许使用此特定表达式?
答案 0 :(得分:5)
您需要将表达式括在一组额外的括号中:
jsoup 1.8.2
请参阅文档摘录:
CREATE INDEX命令的语法通常需要在索引表达式周围编写括号,如第二个示例所示。当表达式只是函数调用时,可以省略括号,如第一个示例所示。
答案 1 :(得分:4)
您还可以使用窗口函数来获得相同的效果,而无需额外的索引(因此维护该索引的开销):
SELECT *, sales - lag(sales) OVER (ORDER BY year) AS sales_difference
FROM sales;
您可能已经拥有的year
上的简单索引就足够了。