Sql 选择给定两个时间段的重复访客

Sql 选择给定两个时间段的重复访客,sql,Sql,我想找到重复访问我的网站的百分比。目前,我正在为一个月选择用户,并将该月除以下一个月。计算返回的数据。这是编写该查询的最佳方式吗 它产生的结果似乎是准确的,但不知道是否有更优雅的解决方案 SELECT ( SELECT COUNT(table.user) as Total FROM table WHERE table.event IN ('event1','event2','event3') AND table.month IN ('october') ) / ( SELECT COUNT(ta

我想找到重复访问我的网站的百分比。目前,我正在为一个月选择用户,并将该月除以下一个月。计算返回的数据。这是编写该查询的最佳方式吗

它产生的结果似乎是准确的,但不知道是否有更优雅的解决方案

SELECT (
SELECT COUNT(table.user) as Total
FROM table
WHERE table.event IN ('event1','event2','event3')
AND table.month IN ('october')
) /
(
SELECT COUNT(table.user) as newTotal
FROM table
WHERE table.event IN ('event1','event2','event3')
AND (table.month IN ('october') OR table.month IN ('november'))
) AS percent_return
表结构如下所示,同一用户在同一个月或同一时间段内购买多个事件

 order_number user month event gross

   1 jack october event2 30
   2 jack november event3 20
   3 jack november event3 20
   4 jack november event2 30
   5 sam november event2 30
   6 john october event3 20
   7 john october non_event 20

您不需要两个子查询来完成所需的操作。只需使用条件聚合:

SELECT (SUM(s.month IN (october)) / SUM(s.month IN (october, november))
       ) as percent_return
FROM sales s
WHERE s.event IN ('event1', 'event2', 'event3') AND
      s.gross > 0;

此外,数字常量周围不需要单引号。

表的结构是什么?如何定义“重复访问者”?你的计算似乎无法解释这一点。当你说你想要%的回头客时,是多少?%与总访客相比,重复访客的数量?或者%的访客回来了?抱歉,重复访客我的意思是,我将在每个月内多次运行此查询。就像在这里,我要和十月/十一月比赛。我可以在1月/2月运行它,等等。我刚刚意识到这不起作用,因为它没有选择user@alex_b . . . “不选择用户”是什么意思?它应该生成与原始查询相同的结果。第一个查询选择用户计数,选择计数(table.user)是否
table.user
接受
NULL
值?这似乎不太可能,但很容易将
和s.user不为null添加到每一个总和中。我发现这是对一切的感谢。