я хочу объединить два запроса в один выбор, проблема в том,
если я использую «союз» все говорят, что разное количество столбцов
сначала выберите —
select users.fromsite,count(*) from users where users.fromsite != '' and users.fromsite is not null group by users.fromsite;
второй выбор —
select sum(transfers.mimgebis_before), sum(transfers.mimgebis_after), users.fromsite,count(*) from transfers join users on transfers.player_id = users.pid where transfers.player_id in (select users.pid from users where users.fromsite in (select users.fromsite from users where fromsite != '' )) and users.fromsite != '' and transfers.date_created between '2013-12-10 08:20:00' and '2015-12-10 08:30:06' group by users.fromsite limit 0,5;
Результаты первого запроса здесь:
|| *fromsite* || *count(*)* ||
|| fortunejack.de || 2 ||
|| google.com || 3 ||
|| youtube.com || 2 ||
результаты второго запроса здесь:
|| *sum(transfers.mimgebis_before)* || *sum(transfers.mimgebis_after)* || *fromsite* || *count(*)* ||
|| 20000.000000000 || || fortunejack.de || 1 ||
|| 53335.000000000 || 2000.000000000 || google.com || 2 ||
Извините за мой плохой английский.
Я не думаю, что вы хотите union
— это потребовало бы, чтобы столбцы были одинаковыми для двух запросов. Я думаю, вы просто хотите left join
где вы добавляете столбцы из второго запроса в первый. Что-то вроде этого:
select fs.fromsite, fs.cnt1, t.val1, t.val2, t.cnt2
from (select u.fromsite, count(*) as cnt1
from users u
where u.fromsite <> '' and u.fromsite is not null
group by u.fromsite
) fs left join
(select sum(t.mimgebis_before) as val1, sum(t.mimgebis_after) as val2, u.fromsite, count(*) as cnt2
from transfers t join
users u
on t.player_id = u.pid
where t.player_id in (select users.pid from users where users.fromsite in (select users.fromsite from users where fromsite != '' )) and
u.fromsite <> '' and t.date_created between '2013-12-10 08:20:00' and '2015-12-10 08:30:06'
group by u.fromsite limit 0,5
) t
on t.fromsite = fs.fromsite;
Других решений пока нет …