Вычесть результаты двух запросов Select в MySQL

Я написал два запроса mysql, один из которых выводит общее количество пользователей (зарегистрированных), присутствующих в определенный месяц года, а другой извлекает активных пользователей в этот конкретный месяц года. Мне нужно найти количество неактивных пользователей за этот год. Для этого я думал вычесть столбцы totalUsers и activeUsers, полученные с помощью двух отдельных запросов. Ниже приведены запросы

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));

Мне нужно вычесть activeUsers из totalUsers. Как мне этого добиться?


person gameOne    schedule 22.11.2016    source источник
comment
Нашел ответ stackOverflow, который отвечает здесь.   -  person IAMZERG    schedule 22.11.2016


Ответы (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 ;
person jai dutt    schedule 22.11.2016
comment
мне нужно иметь столбец месяца как есть и вычесть только активных пользователей с totalUsers, а также наличие оператора set не позволяет слияние - person gameOne; 22.11.2016
comment
вы можете включить другой столбец также в этот запрос, но это сделает ваш запрос немного медленным - person jai dutt; 22.11.2016