基于分析函数的SQL过滤器查询结果

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

我想找到一种有效的方法来过滤SQL中的RANK() OVER函数。

我有以下查询:

SELECT
  base.ITEM_SKU_NBR,
  RANK() OVER (ORDER BY SUM(base.NET_SLS_AMT) DESC) AS SLS_rank,
  RANK() OVER (ORDER BY COUNT(DISTINCT base.txn_id) DESC) AS txn_rank
FROM
  `my_table` base
GROUP BY
  1

哪个返回此表:

enter image description here

现在,我想过滤SLS_rank为<10或txn_rank为<10的项目。理想情况下,我想在HAVING子句中这样做,例如:

SELECT
  base.ITEM_SKU_NBR,
  RANK() OVER (ORDER BY SUM(base.NET_SLS_AMT) DESC) AS SLS_rank,
  RANK() OVER (ORDER BY COUNT(DISTINCT base.txn_id) DESC) AS txn_rank
FROM
  `np-blacklocus.data_commons.preferred_pricing_transaction_base` base
GROUP BY
  1
HAVING SLS_rank < 300 OR txn_rank < 300

但是bigquery给我一个错误:

Column SLS_rank包含一个分析函数,[9:8]]的HAVING子句不允许使用此函数>

我能想到的唯一选择是将其创建为一个单独的表并从中选择,但这看起来并不很漂亮。关于如何执行此操作的其他任何想法?

我想找到一种有效的方法来过滤SQL中的RANK()OVER函数。我有以下查询:SELECT base.ITEM_SKU_NBR,RANK()OVER(按SUM(base.NET_SLS_AMT)排序)AS SLS_rank,...

sql google-bigquery having
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.