聚合函数调用不能嵌套 PostgreSQL。

7
我从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 ;

谢谢!


5
请解释您试图做什么。不起作用的SQL语句并不能很好地解释意图。 - Gordon Linoff
1
编辑您的问题,添加一些示例数据和基于该数据的预期输出。请使用格式化文本,不要使用屏幕截图 - user330315
3个回答

6
您可以使用子查询来获取嵌套的聚合函数,示例如下:
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 ;

2
我不完全理解您在这个示例中要做什么,但我想展示一个在PostgresQL中使用多个聚合函数的示例。
假设我的目标是找到max(time) - min(time)的最大值:
select max(a.trip_time) from 
(  select trip_id, max(time) - min(time) as trip_time 
   from gps_data 
   where date = '2019-11-16' 
   group by trip_id) as a;

我希望这很清楚!


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;

这是我能够想象的对实际意图的最合理解释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接