Sql 根据销售数量为销售的产品创建销售排名表

Sql 根据销售数量为销售的产品创建销售排名表,sql,google-bigquery,Sql,Google Bigquery,我有BQ中的销售数据,其中包含以下列- Customer Id | ItemID | Order_Qty | Order_Date 我想根据商品的总销售量创建一个销售排名表 销售物品最大数量的最高等级 例如-销售总量为30的abc项目应排在第一位,销售总量为20的XYZ项目应排在第二位,以此类推 在生成的表中,我需要以下列 ItemId | Total Quantity | Rank 以下是我迄今为止在遗留SQL格式中的尝试- select ItemId , RANK() o

我有BQ中的销售数据,其中包含以下列-

Customer Id | ItemID | Order_Qty | Order_Date
我想根据商品的总销售量创建一个销售排名表

销售物品最大数量的最高等级

例如-销售总量为30的abc项目应排在第一位,销售总量为20的XYZ项目应排在第二位,以此类推

在生成的表中,我需要以下列

ItemId | Total Quantity | Rank 
以下是我迄今为止在遗留SQL格式中的尝试-

select ItemId ,
       RANK() over (partition by ItemId order by Qty desc) as salesrank
from (SELECT ItemId, sum(order_qty) as Qty
      FROM sales
      group by 1
     )

出于某种原因,所有的销售排名都是1

我推测您希望通过
ean
获得排名。如果是:

SELECT ean, SUM(order_qty) as Qty,
       RANK() OVER (ORDER BY SUM(order_qty) DESC) as rnk
FROM sales
GROUP BY ean;
在传统SQL中,这可能是:

SELECT ean, SUM(order_qty) as Qty,
       RANK() OVER (ORDER BY qty DESC) as rnk
FROM sales
GROUP BY ean

我推测您希望通过
ean
获得排名。如果是:

SELECT ean, SUM(order_qty) as Qty,
       RANK() OVER (ORDER BY SUM(order_qty) DESC) as rnk
FROM sales
GROUP BY ean;
在传统SQL中,这可能是:

SELECT ean, SUM(order_qty) as Qty,
       RANK() OVER (ORDER BY qty DESC) as rnk
FROM sales
GROUP BY ean

下面是BigQuery标准SQL

#standardSQL
SELECT 
  ItemID, Total_Quantity, 
  RANK() OVER(ORDER BY Total_Quantity DESC) AS rnk
FROM (
  SELECT ItemID, SUM(Order_Qty) AS Total_Quantity
  FROM sales
  GROUP BY ItemID
)
-- ORDER BY rnk

下面是BigQuery标准SQL

#standardSQL
SELECT 
  ItemID, Total_Quantity, 
  RANK() OVER(ORDER BY Total_Quantity DESC) AS rnk
FROM (
  SELECT ItemID, SUM(Order_Qty) AS Total_Quantity
  FROM sales
  GROUP BY ItemID
)
-- ORDER BY rnk

您的查询应该会失败,因为
itemId
不在子查询中。我刚刚编辑了查询。谢谢您的查询应该会失败,因为子查询中没有
itemId
。我刚刚编辑了查询。谢谢,我已经尝试了这个查询,但是失败了。在BQ中,它抛出错误-在分析表达式中,ORDERBY必须引用命名列。发现SUMI已尝试此查询,但失败。在BQ中,它抛出错误-在分析表达式中,ORDERBY必须引用命名列。现款