如何获得一周中每天的平均不同用户数量?

时间:2019-08-09 21:19:09

标签: sql sqlite

我正在尝试使用SQLite来获取一周中每天的平均独立客户和员工人数(即,平均每个星期二有多少独立客户)。

这是一些示例数据。这些日期都是星期二,因此在这种情况下,星期二的独立客户的平均人数为1,而工作的独立员工的平均人数为3:

 id   starttime           customer  employee
 1    2019-01-01 12:00    1         1
 2    2019-01-01 12:00    1         2
 3    2019-01-01 12:00    1         3
 4    2019-01-08 12:00    2         1
 5    2019-01-08 12:00    2         2
 6    2019-01-08 12:00    2         3
 7    2019-01-15 12:00    3         1
 8    2019-01-15 12:00    3         2
 9    2019-01-15 12:00    3         3



select strftime('%w', starttime) as day_number,
count(distinct customer) / count(distinct starttime) as 
    avg_customer,
count(distinct employee) / count(distinct starttime) as 
    avg_employee
from logins
group by strftime('%w', starttime);

我尝试了上面的代码,该代码适用于客户(输出为1)但不适用于员工(输出为1,但应为3),我现在意识到这是因为我需要计算每个日期的计数然后除按日期数计算,而不是按所有日期计算不同的员工,然后除以日期数,但是我在努力解决这个问题。

2 个答案:

答案 0 :(得分:0)

您需要删除两次出现的

/ count(distinct starttime)

因此,您剩下的查询将为您提供每天的独立客户和员工数量。

然后,将整个查询嵌套在另一个查询中,该查询只是对这些字段求平均值

Select AVG(distinct_customers), AVG(distinct_employees) from (your query)

在对直到最后一步之前不进行除法的任何事物求平均之前,先将所有内容相加然后除法,这是一条很好的经验法则。

答案 1 :(得分:0)

  

如何获取一周中每天的平均独立用户数量?

  1. 获取每天的独立用户数。
  2. 获取每周的平均值。

查询:

select
  strftime('%w', day) as week,
  avg(customers) as avg_customer,
  avg(employees) as avg_employee
from
(
  select
    date(starttime) as day,
    count(distinct customer) as customers,
    count(distinct employee) as employees
  from logins
  group by date(starttime)
) days
group by strftime('%w', day)
order by strftime('%w', day);