我想计算按月返回的不同用户, 我认为这个查询的主要问题是它在10月或11月选择用户我希望成为AND。
SELECT (
SELECT COUNT( DISTINCT table.user )
FROM table
WHERE table.month IN (october)
) / (
SELECT COUNT( DISTINCT table.user )
FROM table
WHERE table.month IN (october,november)
)*100 AS return_users
表格结构
user month
jack october
jack november
jack november
jack november
sam november
john october
john october
答案 0 :(得分:2)
我认为更简单的方法来处理这种类型的查询是使用子查询。首先在用户级别汇总,跟踪他们是否在10月/ 11月。然后总结最终结果:
select sum(inoctober > 0 and innovember > 0) / sum(inoctober)*100 as percent_returning
from (select t.user, max(t.month in (october)) as inoctober,
max(t.month in (november)) as innovember
from table t
where t.month in (october, november)
group by t.user
) t;
答案 1 :(得分:1)
如果我理解正确,你需要数量不同的用户,10月和11月的所有用户10月除以。也就是说,11月份返回的用户百分比。
首先,明确了11月份访问过的所有用户的数量。这是通过EXISTS
完成的,以查找每个用户在该月份中存在的先前记录。
其次,在十月份获得所有用户的明确计数。
然后你就分开了。
SELECT
(
SELECT COUNT( DISTINCT t1.user )
FROM mytable t1
WHERE t1.month = 'November'
AND EXISTS (
SELECT *
FROM mytable t2
WHERE t2.user = t1.user
AND t2.month = 'October'
)
)
/
(
SELECT COUNT( DISTINCT mytable.user )
FROM mytable
WHERE mytable.month = 'October'
) * 100
答案 2 :(得分:0)
据我了解,您可以将查询设置为:
table.date IN(十月) AND table.date IN(11月)
INSTEAD OF: table.date IN(十月,十一月)
希望这有帮助。