创建一周内活跃天数的分布。 SQL
Create a distribution of number of days active in a week. SQL
我在 SQL 中有一个 table 看起来像这样。
Date CustomerID
1/1 12
1/3 32
1/3 42
1/4 52
1/4 62
1/5 75
我想创建一周内活跃 # 天的分布:创建一个 table 以显示有多少成员在 3/1-3/ 期间活跃了 1 天、2 天、3 天……7 天7.
Screenshot of desired result
我已经写了这个查询。有用吗?
SELECT COUNT (DISTINCT date) AS ‘#Days Active’, COUNT(DISTINCT memberID) AS ‘Count’
FROM User Table
WHERE date BETWEEN ‘03/01/17’ AND 03/07/17
GROUP by COUNT (DISTINCT date)
ORDER BY COUNT (DISTINCT date) ASC;
如果我理解正确的话,您的 table 每个客户有多行。例如客户 12 在输入日期之间有一行,客户 32 在输入日期之间有 3 行。
首先需要按customerId分组得到activeDayCounts,然后按activeDays分组统计customer
select x.activeDays, count(1) count from (
select CustomerID, count(1) activeDays from temp
where Date between '2017-03-01' and '2017-03-07'
group by CustomerID) x
group by x.activeDays
您可以使用 link https://dbfiddle.uk/?rdbms=sqlserver_2012&fiddle=19a3187913985faef617d9110730feba
检查示例
如果我没有误解你的意思,代码如下:
这是一个两步查询:
step1:获取每个成员的活跃天数
step2: 获取每种活跃天数的会员数。
SELECT active_days, count(*) AS member_cnt
FROM(
SELECT CustomerID, count(*) AS active_days
FROM your_table_name
GROUP BY CustomerID)a
GROUP BY active_days
我在 SQL 中有一个 table 看起来像这样。
Date CustomerID
1/1 12
1/3 32
1/3 42
1/4 52
1/4 62
1/5 75
我想创建一周内活跃 # 天的分布:创建一个 table 以显示有多少成员在 3/1-3/ 期间活跃了 1 天、2 天、3 天……7 天7.
Screenshot of desired result
我已经写了这个查询。有用吗?
SELECT COUNT (DISTINCT date) AS ‘#Days Active’, COUNT(DISTINCT memberID) AS ‘Count’
FROM User Table
WHERE date BETWEEN ‘03/01/17’ AND 03/07/17
GROUP by COUNT (DISTINCT date)
ORDER BY COUNT (DISTINCT date) ASC;
如果我理解正确的话,您的 table 每个客户有多行。例如客户 12 在输入日期之间有一行,客户 32 在输入日期之间有 3 行。
首先需要按customerId分组得到activeDayCounts,然后按activeDays分组统计customer
select x.activeDays, count(1) count from (
select CustomerID, count(1) activeDays from temp
where Date between '2017-03-01' and '2017-03-07'
group by CustomerID) x
group by x.activeDays
您可以使用 link https://dbfiddle.uk/?rdbms=sqlserver_2012&fiddle=19a3187913985faef617d9110730feba
检查示例如果我没有误解你的意思,代码如下: 这是一个两步查询: step1:获取每个成员的活跃天数 step2: 获取每种活跃天数的会员数。
SELECT active_days, count(*) AS member_cnt
FROM(
SELECT CustomerID, count(*) AS active_days
FROM your_table_name
GROUP BY CustomerID)a
GROUP BY active_days