Этот запрос выглядит некорректно (отсутствует условие ON
)
SELECT foo,count(*)
FROM A
JOIN (SELECT SUM(IF(bar = 2,1,0)) as bar_sum,
SUM(IF(foo >= 1,1,0)) as foo,
SUM(1) as sum_1
FROM B) as sums -- should be `ON`
GROUP BY id, bar_sum, foo, sum_1;
-- looks like grouping by sum_1, bar_sum is superflous
GROUP BY
применяется только к внешнему запросу.Обратите внимание, что внутренний запрос будет возвращать одну строку.
SELECT SUM(IF(bar = 2,1,0)) as bar_sum,
SUM(IF(foo >= 1,1,0)) as foo,
SUM(1) as sum_1
FROM B
-- single row
Затем вы присоединяете одну строку к таблице A и получаете столько строк, сколько разных значений (id, foo).