Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在一定条件下获得前N行_Sql_Sum_Greatest N Per Group_Presto_Amazon Athena - Fatal编程技术网

Sql 如何在一定条件下获得前N行

Sql 如何在一定条件下获得前N行,sql,sum,greatest-n-per-group,presto,amazon-athena,Sql,Sum,Greatest N Per Group,Presto,Amazon Athena,我有一个类似这样的问题: SELECT product_id, site, category_id, session_time, sum(cast(coalesce("#clicks", 0) AS bigint)) AS clicks FROM df WHERE site IN ('com', 'co') AND session_time = DATE('2020-02-27') GROU

我有一个类似这样的问题:

SELECT product_id,
         site,
         category_id,
         session_time,
         sum(cast(coalesce("#clicks",
         0) AS bigint)) AS clicks
FROM df
WHERE site IN ('com', 'co')
        AND session_time = DATE('2020-02-27')
GROUP BY  product_id, site, session_time, category_id
ORDER BY clicks desc
LIMIT 10
但是现在,我想根据点击量查看每个站点和类别的前10个产品id。当我写限制函数时,它只显示前10名的产品,但不按类别id和店铺id进行分组


如何执行此操作?

使用窗口功能。您可以通过在子查询的站点/类别分区内按降序单击对记录进行排序,然后在外部查询中进行筛选:

SELECT *
FROM (
    SELECT 
        product_id,
        site,
        category_id,
        session_time,
        SUM("#clicks") clicks,
        RANK() OVER(PARTITION BY site, category_id ORDER BY sum("#clicks") DESC) rn
    FROM df
    WHERE 
        site IN ('com', 'co')
        AND session_time = DATE('2020-02-27')
    GROUP BY  product_id, site, session_time, category_id
) t
WHERE rn <= 10
ORDER BY site, category, clicks desc
我不清楚为什么在sum中需要合并/转换逻辑,就像其他聚合函数一样,sum ignore null值,而且似乎clicks已经是一个数字了,所以我删除了它-如果您确实需要它,您可以将其添加回去,原因我想不出