Sql 不同列按多个列选择和分组

Sql 不同列按多个列选择和分组,sql,postgresql,Sql,Postgresql,我试图在页面视图表中按访客id分组,以计算“访客”而不是“页面视图” 我的模式包括 id visitor_id country_code created_at 以下查询类型有效,但如果在同一分钟内有多条记录,则该分钟的计数将大于1,但该访客id的其他分钟将不存在 选择DISTINCT ON(访客id) 楼层(摘录(从已创建的位置开始的历元)/60) -楼层(提取(时区“utc”)处从现在开始的历元()/60) 几分钟后, 计数(不同的访客id)作为计数 从页面视图 按访客id分组,分钟; 更

我试图在
页面视图
表中按
访客id
分组,以计算“访客”而不是“页面视图”

我的模式包括

id
visitor_id
country_code
created_at
以下查询类型有效,但如果在同一
分钟内有多条记录,则该分钟的计数将大于1,但该
访客id的其他分钟将不存在

选择DISTINCT ON(访客id)
楼层(摘录(从已创建的位置开始的历元)/60)
-楼层(提取(时区“utc”)处从现在开始的历元()/60)
几分钟后,
计数(不同的访客id)作为计数
从页面视图
按访客id分组,分钟;
更新: 以下是一些示例数据和预期结果

+----+------------+-------------+
| id | visitor_id | created_at  |
+----+------------+-------------+
|  1 |          1 | 1571520145  |
|  2 |          1 |  1571520085 |
|  3 |          3 |  1571520085 |
+----+------------+-------------+
这将基本上为每个不同的分钟返回1个计数,因此它实际上只对每个唯一的访问者进行计数,而不考虑“分钟”

我正在尝试在页面视图表上按访问者id分组,以计算“访问者”

如果您想按访客分组,则
group by visitor\u id
就是您想要的。然后,问题就变成了你对每一位访客的计数。如果您想计算每个访问者在数据中出现的次数,
count(*)
会这样做<代码>计数(不同的访客id)
是不必要的;我们已经在按访客分组了

你似乎也想知道关于每位访客的分钟数。不管它是什么,它都是某种聚合,可能是
sum()
。如果是这样,您的查询可以简化为标准SQL,格式如下:

select 
     visitor_id, 
     sum(  FLOOR(EXTRACT(epoch from created_at) / 60) 
         - FLOOR(extract(epoch from now() at time zone 'utc') / 60) ) 
     as minutes, 
     count(*) as count 
from page_views 
group by visitor_id
分组依据
的一般规则是,SELECT中不在分组依据中的所有内容都必须是聚合。另一种思考方式是,select中未按分组的任何内容都是该组值的函数

我试图在页面视图表中按访问者id分组,以计算“访问者”而不是“页面视图”

我将把这解释为在特定的时间段想要独特的访客。这并不完全是这句话的意思,但它更符合这个问题

如果是这样,
visitor\u id
不属于
组BY

select (FLOOR(EXTRACT(epoch from created_at) / 60) -
        FLOOR(extract(epoch from now() at time zone 'utc') / 60) 
       ) as minutes, 
       count(DISTINCT visitor_id) as count 
from page_views 
group by minutes
order by minutes;
如果只想计算某人的首次访问次数,请使用子查询:

select (FLOOR(EXTRACT(epoch from created_at) / 60) -
        FLOOR(extract(epoch from now() at time zone 'utc') / 60) 
       ) as minutes, 
       count(DISTINCT visitor_id) as count 
from (select visitor_id, min(created_at as created_at
      from page_views 
      group by visitor_id
     ) v
group by minutes
order by minutes;

你说了你不想做的,但不是你想做的。如果按访问者id分组,“计数(不同的访问者id)”怎么可能大于1?@jjanes我基本上想计算每个唯一的访问者,而不是页面浏览量。示例数据和所需结果会有所帮助。如果你想计算唯一访客的数量,查询中的
minutes
在做什么?@GordonLinoff我用一些示例数据和更好的解释更新了问题。我想将
visitor\u id
的第一个实例基本上分组为
minutes
,这样只返回一个
visitor\u id
。基本上是访问者第一次访问页面时。