PostgreSQL 错误:我的排名语法有什么问题? [关闭]

问题描述 投票:0回答:1

我不断收到 ERROR: syntax error at or near "(" LINE 58: Rank() Over(Partition by s.customer_id ORDER by Count(order_... ^

Select 
s.customer_id,
order_date,
join_date,
product_name
Rank() Over(Partition by customer_id ORDER by Count(order_date))
From members as MB
Inner Join sales as S on S.customer_id = MB.customer_id
Inner Join menu as M on M.product_id = S.product_id 
Where order_date >= join_date

尝试使用等级和行号 () 但我似乎无法让它们在 postgresql 中工作。我的语法有什么问题?

postgresql rank row-number
1个回答
0
投票

语法问题是 SELECT 语句中的 product_name 和 Rank() 之间缺少逗号。更正后的查询应如下所示:

SELECT  s.customer_id, order_date, join_date, product_name, RANK() OVER (PARTITION BY s.customer_id ORDER BY COUNT(order_date)) FROM members AS MB INNER JOIN sales AS S ON S.customer_id = MB.customer_id INNER JOIN menu AS M ON M.product_id = S.product_id  WHERE order_date >= join_date;

请注意,我在 product_name 之后添加了一个逗号,以将其与 RANK() 函数调用分开。另外,请确保在查询末尾包含一个分号以终止它。

在 PostgreSQL 中,使用 RANK() 等窗口函数的语法是在 SELECT 列表中的列名之后包含函数调用,并以逗号分隔。 OVER 子句指定应用函数的窗口框架。在这种情况下,PARTITION BY 子句按 customer_id 列对行进行分区,ORDER BY 子句按订单数降序对每个分区内的行进行排序。然后,RANK() 函数根据 ORDER BY 子句指定的顺序为其分区内的每一行分配一个排名。

© www.soinside.com 2019 - 2024. All rights reserved.