Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在内部查询中使用计数之后,我尝试在子查询中使用avg()函数,但在SQL中似乎无法使其工作_Sql_Sql Server_Database - Fatal编程技术网

在内部查询中使用计数之后,我尝试在子查询中使用avg()函数,但在SQL中似乎无法使其工作

在内部查询中使用计数之后,我尝试在子查询中使用avg()函数,但在SQL中似乎无法使其工作,sql,sql-server,database,Sql,Sql Server,Database,我的表名是CustomerDetails,它有以下列: customer_id, login_id, session_id, login_date 我正在尝试编写一个查询,计算每天登录的平均客户数 我试过这个: select avg(session_id) from CustomerDetails where exists (select count(session_id) from CustomerDetails as 'no_of_entries') 但后来我意识到这是直接到列,只是计

我的表名是
CustomerDetails
,它有以下列:

customer_id, login_id, session_id, login_date
我正在尝试编写一个查询,计算每天登录的平均客户数

我试过这个:

select avg(session_id)
from CustomerDetails
where exists (select count(session_id) from CustomerDetails as 'no_of_entries')

但后来我意识到这是直接到列,只是计算该列的平均值,但这不是我想做的。有人能帮我吗?
谢谢

您需要做的第一件事就是每天登录:

SELECT login_date, COUNT(*) AS loginsPerDay
FROM CustomerDetails
GROUP BY login_date
SELECT AVG(loginsPerDay)
FROM (
  SELECT login_date, COUNT(*) AS loginsPerDay
  FROM CustomerDetails
  GROUP BY login_date
)
然后,您可以使用它获得每天的平均登录次数:

SELECT login_date, COUNT(*) AS loginsPerDay
FROM CustomerDetails
GROUP BY login_date
SELECT AVG(loginsPerDay)
FROM (
  SELECT login_date, COUNT(*) AS loginsPerDay
  FROM CustomerDetails
  GROUP BY login_date
)
如果您的登录日期是
日期
类型,则所有设置均已设置。如果它有一个时间组件,则只需将其截断为最新:

SELECT AVG(loginsPerDay)
FROM (
  SELECT CAST(login_date AS DATE), COUNT(*)
  FROM CustomerDetails
  GROUP BY CAST(login_date AS DATE)
)
我正在尝试编写一个查询,计算每天登录的平均客户数

数一数顾客的数量。除以天数。我认为这是:

select count(*) * 1.0 / count(distinct cast(login_date as date))
from customerdetails;

我知道你要算的是每天的访客数量,而不是访客数量。因此,如果一个客户在同一天登录了两次,那么您只想计算他一次

如果是这样,您可以使用
distinct
和两级聚合,如下所示:

select avg(cnt_visitors) avg_cnt_vistors_per_day
from (
    select count(distinct customer_id) cnt_visitors
    from customer_details 
    group by cast(login_date as date)
) t

内部查询计算每天不同客户的数量,外部查询为您提供总体平均值。

好的,这似乎可行,因此我必须统计所有客户并添加“不同”以防止重复客户或日期??如果我想计算最后5天的时间呢?我还可以在中使用avg函数吗?@Billz。您的问题不清楚您想要的是不同的客户还是不同的行。如果需要,可以使用
count(distinct customerid)
。对于一个范围,您可以添加一个
where
子句,其中包含您想要的范围。非常感谢。。现在我想更进一步,在过去的5天里每天平均吸引用户。。但是我已经失去了添加
WHERE CAST(login_date AS date)>=DATEADD(DAY,-5,CAST(GETDATE()AS date))
中的
之后和
分组之前(好的,这太棒了。。它起作用了。。但是,我添加了另一个外部查询来计算过去五天的时间,如下所示:从customer_details中选择*datediff(day,login_date,getdate())作为“期间”,其中datediff(day,login_date,getdate())介于1和5之间。。但是,我很难将其添加到现有的query@Billz:要筛选过去5天,只需在内部查询中添加一个
where
子句,如:
fromcustomer\u details\u-where-login\u-date>cast(dateadd(day,-5,getdate())as-date)