【问题标题】:Create a Sales Rank table for the products sold based on the quantity sold根据售出的数量为售出的产品创建销售排名表
【发布时间】:2017-09-12 23:35:03
【问题描述】:

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

Customer Id | ItemID | Order_Qty | Order_Date

我想根据商品的总销量创建一个销售排名表。

最大售出物品数量的最高排名。

例如。 - 总销量为 30 的商品 abc 应排名第 1,总销量为 20 的商品 XYZ 应排名第 2,依此类推。

在我的结果表中,我想要以下列。

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

【问题讨论】:

  • 您的查询应该失败,因为itemId 不在子查询中。
  • 我刚刚编辑了查询。谢谢

标签: sql google-bigquery


【解决方案1】:

以下是 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

【讨论】:

    【解决方案2】:

    我推测您想要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
    

    【讨论】:

    • 我已经尝试过这个查询,但它失败了。在 BQ 中它会引发错误 - 在分析表达式中,ORDER BY 必须引用命名列。找到总和
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    相关资源
    最近更新 更多