postgresql 聚合函数调用不能嵌套

uhu*_*now 8 sql postgresql

我收到来自 PostgreSQL 的“聚合函数调用不能嵌套”错误。我尝试了很多不同的事情但无法解决。

select c.*, (
             select sum((count(distinct product_id))/2)
             from page_views
             where product_id in (c.p1, c.p2)
             group by user_id, session_id
             having count(distinct product_id) > 1
            ) freq
from (
      select a.product_id p1, b.product_id p2
      from (select distinct product_id from page_views) a,
           (select distinct product_id from page_views ) b
      where a.product_id <> b.product_id
     ) c ;
Run Code Online (Sandbox Code Playgroud)

谢谢!

Łuk*_*ski 7

您可以使用 subselect 来获取嵌套聚合函数,如下所示:

select c.*, (SELECT sum(count_column) FROM (
                 select (count(distinct product_id))/2 AS count_column
                 from page_views
                 where product_id in (c.p1, c.p2)
                 group by user_id, session_id
                 having count(distinct product_id) > 1
               ) sub_q
            ) freq
from (
      select a.product_id p1, b.product_id p2
      from (select distinct product_id from page_views) a,
           (select distinct product_id from page_views ) b
      where a.product_id <> b.product_id
     ) c ;
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 1

如果您想统计在单个感官中看过两个页面的用户,那么查询如下:

select v1.product_id, v2.product_id, count(distinct v2.user_id)
from page_views v1 join
     page_views v2
     on v1.user_id = v2.user_id and v1.session_id = v2.session_id and
        v1.product_id < v2.product_id
group by v1.product_id, v2.product_id;
Run Code Online (Sandbox Code Playgroud)

这是我能想象到的对实际意图的最明智的解释。