PostgreSQL:没有与给定名称和参数类型匹配的函数。每周用户登录队列分析

PostgreSQL:没有与给定名称和参数类型匹配的函数。每周用户登录队列分析,sql,postgresql,Sql,Postgresql,函数sum(布尔值)不存在第13行:ISNULL(sum(s.Offset= 0),0)w1,^提示:没有函数与给定的名称和参数匹配 类型。您可能需要添加显式类型转换 我试图创建一个每周队列分析,显示每周登录统计数据。 正如你所看到的,这就是我想要实现的目标: 这是我发现的,也是我试图重新创造的: 以下是我试图获取数据的表格: 这就是我到目前为止重构的内容: SELECT STR_TO_DATE(CONCAT(tb.cohort, ' Monday'), '%X-%V %W') as

函数sum(布尔值)不存在第13行:ISNULL(sum(s.Offset= 0),0)w1,^提示:没有函数与给定的名称和参数匹配 类型。您可能需要添加显式类型转换

我试图创建一个每周队列分析,显示每周登录统计数据。 正如你所看到的,这就是我想要实现的目标:

这是我发现的,也是我试图重新创造的:

以下是我试图获取数据的表格:

这就是我到目前为止重构的内容:

SELECT
STR_TO_DATE(CONCAT(tb.cohort, ' Monday'), '%X-%V %W') as date,
size,
w1,
w2,
w3,
w4,
w5,
w6,
w7
FROM (
  SELECT u.cohort, 
    ISNULL(SUM(s.Offset = 0), 0) w1,
    ISNULL(SUM(s.Offset = 1), 0) w2,
    ISNULL(SUM(s.Offset = 2), 0) w3,
    ISNULL(SUM(s.Offset = 3), 0) w4,
    ISNULL(SUM(s.Offset = 4), 0) w5,
    ISNULL(SUM(s.Offset = 5), 0) w6,
    ISNULL(SUM(s.Offset = 6), 0) w7
  FROM (
   SELECT
      id,
      last_login AS cohort
    FROM users_user
  ) as u
  LEFT JOIN (
      SELECT DISTINCT
      login_log.user_id,
      DATE_PART('day',(users_user.last_login - users_user.date_joined)/7) AS Offset
      FROM users_userloginlog login_log
      LEFT JOIN users_user ON (users_user.id = login_log.user_id)
  ) as s ON s.user_id = u.id
  GROUP BY u.cohort
) as tb
LEFT JOIN (
  SELECT DATE_FORMAT(AddedDate, "%Y-%u") dt, COUNT(*) size FROM users GROUP BY dt
) size ON tb.cohort = size.dt

正如错误消息告诉您的:您不能对布尔值求和。和
s.Offset=0
返回
true
false
(或
null
)。
真、假、真、真、假的“和”是多少

您可以使用过滤聚合实现您想要的:

  SELECT u.cohort, 
         count(*) filter (where s.Offset = 0 as w1,
         count(*) filter (where s.Offset = 1) as w2,
         count(*) filter (where s.Offset = 2) as w3,
         count(*) filter (where s.Offset = 3) as w4,
         count(*) filter (where s.Offset = 4) as w5,
         count(*) filter (where s.Offset = 5) as w6,
         count(*) filter (where s.Offset = 6) as w7,    
   ....

str\u to\u date()
date\u format()
不是Postgres函数。你确定你在使用Postgres吗?嘿,我们可以继续聊天吗?