2016-11-22 103 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