我想找到一种有效的方法来过滤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
哪个返回此表:
现在,我想过滤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,...