SQL:如何在没有分组依据的情况下计算值的总和

SQL:如何在没有分组依据的情况下计算值的总和,sql,google-bigquery,Sql,Google Bigquery,我有下表: visitorId visitNumber DATE 1 1 20180101 1 2 20180101 1 3 20180105 2 1 20171230 2 2 20180106 我想回报

我有下表:

visitorId    visitNumber   DATE         
1            1             20180101     
1            2             20180101   
1            3             20180105    
2            1             20171230  
2            2             20180106    
我想回报的是:

visitorId    totalVisits   max_visits_in_1_day  
1            3             2                       
2            2             1                       
我使用以下工具,在一天内不进行max_访问的情况下,使一切正常工作:

我需要做的是改进代码,以便添加max_在_1_天内访问_。类似于MAXCOUNTGROUP BYDATE的内容

我第一次尝试添加MAXCOUNTDATE,但这会聚合所有日期,实际上不会查找最大唯一日期。从某种意义上说,我需要按日期分组,然后计算总数


我尝试按visitorId、DATE添加组,但这会创建额外的行。

您可以尝试以下查询-

SELECT visitorId
      ,COUNT(visitNumber) totalVisits
      ,mv1d.count max_visits_in_1_day
FROM YOUR_TABLE YT
INNER JOIN (SELECT visitorId, MAX(COUNT(DATE)) count
            FROM YOUR_TABLE YT1)
ON YT.visitorId = YT1.visitorId
GROUP BY visitorId

您可以尝试以下查询-

SELECT visitorId
      ,COUNT(visitNumber) totalVisits
      ,mv1d.count max_visits_in_1_day
FROM YOUR_TABLE YT
INNER JOIN (SELECT visitorId, MAX(COUNT(DATE)) count
            FROM YOUR_TABLE YT1)
ON YT.visitorId = YT1.visitorId
GROUP BY visitorId

您必须采取以下两个步骤:

SELECT visitorId, SUM(perDay) AS totalVisits, MAX(perDay) AS max_visits_in_1_day
FROM
(SELECT visitorId, COUNT(visitNumber) AS perDay, DATE
FROM myTable
GROUP BY visitorId, DATE) A
GROUP BY visitorId

您必须采取以下两个步骤:

SELECT visitorId, SUM(perDay) AS totalVisits, MAX(perDay) AS max_visits_in_1_day
FROM
(SELECT visitorId, COUNT(visitNumber) AS perDay, DATE
FROM myTable
GROUP BY visitorId, DATE) A
GROUP BY visitorId

@一个没有名字的大查询SQL,我不确定它的背后是什么,它是遗留的SQL。我不理解DATE列和visitTime列之间的依赖关系。你怎么能在2017-12-30进行访问,访问时间为1970-01-01?我只是输入了任意值依赖项不正确,但访问时间的概念只是用来计算访问之间的时间,因此计数开始时无关紧要,只有两次访问之间的时间,这也可能是不正确的问题仍然存在,即使我们删除该栏,它实际上不是必需的,而且两次访问之间的时间你已经走了一半。你只需要更牢固地分开你的脚步。将数据聚合到每个用户每个日期一行,允许您在聚合中使用COUNT。然后在另一个查询中处理这些结果,每个用户聚合到一行,允许您使用SUM和MAX。这可以通过嵌套SQL查询轻松完成。从中选择a、SUMy、MAXy从xxx GROUP BY a中选择a、b、COUNTx作为子查询GROUP BY a*子查询的结果被视为任何其他数据集,例如从表或视图中选择的数据集。@a\u horse\u与\u no\u name大查询SQL,我不确定其背后是什么,这是传统SQLI,我不理解日期列和visitTime列之间的依赖关系。你怎么能在2017-12-30进行访问,访问时间为1970-01-01?我只是输入了任意值依赖项不正确,但访问时间的概念只是用来计算访问之间的时间,因此计数开始时无关紧要,只有两次访问之间的时间,这也可能是不正确的问题仍然存在,即使我们删除该栏,它实际上不是必需的,而且两次访问之间的时间你已经走了一半。你只需要更牢固地分开你的脚步。将数据聚合到每个用户每个日期一行,允许您在聚合中使用COUNT。然后在另一个查询中处理这些结果,每个用户聚合到一行,允许您使用SUM和MAX。这可以通过嵌套SQL查询轻松完成。从中选择a、SUMy、MAXy从xxx中选择a、b、COUNTx按a分组,b按a分组作为子查询组*子查询的结果被视为任何其他数据集,例如从表或视图中。这种布局伤害了我衰老的脑细胞,但方法是正确的。聚合两次,一次达到中等水平……这种布局伤害了我衰老的脑细胞,但这种方法是正确的。聚合两次,一次达到中间水平。。。