2016-11-22 67 views
0

我写了两个mysql查询,其中一个提取我在一年的特定月份中出现的总用户(注册),另一个提取当年特定月份中的活动用户。我需要找到当年不活跃用户的数量。为此,我正在考虑减去通过两个单独查询获得的totalUsers和activeUsers列。 下面是查询在Mysql中减去两个Select查询的结果

1. Fetch Total Registered users 

set @numberOfUsers := 0; 
SELECT T.createdMonth, T.monthlyusers, (@numberOfUsers := @numberOfUsers + T.monthlyusers) as totalUsers 
FROM 
(
SELECT month(from_unixtime(u.createdDate)) as createdMonth, count(u.id) as monthlyusers 
FROM user u 
where year(from_unixtime(u.createdDate)) = '2016' 
group by month(from_unixtime(u.createdDate))  
) T; 

2. Fetch Active Users 

select month(from_unixtime(lastActive)), (count(u.id)) as activeUsers from user u 
where year(from_unixtime(lastActive)) = '2016' 
group by month(from_unixtime(lastActive)); 

我需要从totalUsers减去activeUsers。我如何实现这一目标?

+0

发现一个StackOverflow的答案,回答是[这里](http://stackoverflow.com/questions/6715095/how-to-sum-and-subtract - 使用-SQL)。 – IAMZERG

回答

1

你可以简单地减去两个查询或合并

select (select query) - (select query); 

SET @numberOfUsers := 0; 

SELECT l.totalUsers-a.monthlyusers FROM (SELECT T.createdMonth, 
T.monthlyusers, (@numberOfUsers := @numberOfUsers + T.monthlyusers) AS totalUsers 
FROM 
(
SELECT MONTH(FROM_UNIXTIME(u.createdDate)) AS createdMonth, COUNT(u.id) AS monthlyusers 
FROM USER u 
WHERE YEAR(FROM_UNIXTIME(u.createdDate)) = '2016' 
GROUP BY MONTH(FROM_UNIXTIME(u.createdDate))  
) T) l,(SELECT MONTH(FROM_UNIXTIME(lastActive)), (COUNT(u.id)) AS activeUsers FROM USER u 
WHERE YEAR(FROM_UNIXTIME(lastActive)) = '2016' 
GROUP BY MONTH(FROM_UNIXTIME(lastActive))) a ; 
+0

我需要有月份列,因为它是和总用户减去只有activeUsers和也有“设置”的声明不允许合并 – gameOne

+0

您可以包括其他颜色也在此查询,但它使您的查询速度慢有点 –

+0

酷我得到了我期待的结果。谢谢 – gameOne