【发布时间】:2023-01-12 20:59:55
【问题描述】:
我绝不是 SQL 专家,也不是 H2,所以请随意将我拖入困境。我有两个表,一个名为 ORDERS,一个名为 PRODUCTS,我试图显示数据中每年可用的前三个销售类别。
运行以下 SQL 时:
WITH year_categories AS (
SELECT EXTRACT(YEAR FROM ORDERS.CREATED_AT) AS year,
PRODUCTS.CATEGORY AS "Category",
SUM(ORDERS.TOTAL) AS total_sales
FROM ORDERS JOIN PRODUCTS
ON ORDERS.PRODUCT_ID = PRODUCTS.ID
GROUP BY year, PRODUCTS.CATEGORY
)
SELECT year, "Category", total_sales
FROM (
SELECT year, "Category", total_sales,
ROW_NUMBER() OVER (PARTITION BY year ORDER BY total_sales DESC) as row_num
FROM year_categories
) sub
WHERE sub.row_num <= 3
ORDER BY year, total_sales DESC;
我收到以下错误:
块引用 SQL 语句中的语法错误 WITH YEAR_CATEGORIES AS ( SELECT EXTRACT(YEAR FROM ORDERS.CREATED_AT) AS YEAR, PRODUCTS.CATEGORY AS ""Category", SUM(ORDERS.TOTAL) AS TOTAL_SALES FROM ORDERS JOIN PRODUCTS ON ORDERS.PRODUCT_ID = PRODUCTS .ID GROUP BY YEAR, PRODUCTS.CATEGORY ) SELECT YEAR, ""Category", TOTAL_SALES FROM ( SELECT YEAR, ""Category", TOTAL_SALES, ROW_NUMBER() OVER (PARTITION[*] BY YEAR ORDER BY TOTAL_SALES DESC) AS ROW_NUM FROM YEAR_CATEGORIES ) SUB WHERE SUB.ROW_NUM <= 3 ORDER BY YEAR, TOTAL_SALES DESC; ";预期的 ”)”; SQL语句:WITH year_categories AS ( SELECT EXTRACT(YEAR FROM ORDERS.CREATED_AT) AS year, PRODUCTS.CATEGORY AS "Category", SUM(ORDERS.TOTAL) AS total_sales FROM ORDERS JOIN PRODUCTS ON ORDERS.PRODUCT_ID = PRODUCTS.ID GROUP BY year , PRODUCTS.CATEGORY ) SELECT year, "Category", total_sales FROM ( SELECT year, "Category", total_sales, ROW_NUMBER() OVER (PARTITION BY year ORDER BY total_sales DESC) as row_num FROM year_categories ) sub WHERE sub.row_num <= 3 ORDER BY year, total_sales DESC; [42001-197]
我究竟做错了什么?我试过在 ROW_NUM 之后的几个不同位置插入“)”,但没有不同的结果。或者,是否有更简单或更好的方法来构造此查询?
提前感谢您的帮助!
【问题讨论】: