Тестовая структура:
CREATE TABLE a (
id INT
);
CREATE TABLE b (
id INT,
a_id INT,
sum INT
);
INSERT INTO a SET id=1;
INSERT INTO b SET id=1, a_id=1, sum=2;
INSERT INTO b SET id=2, a_id=1, sum=3;
Надо в один селект получить для каждой строки из a количество записей из b с a_id равным id текущей строки, и сумму всех полей sum. Если таких записей нет, строка из a все равно должна оставаться в выдаче.
Как писать не представляю совсем, кроме того, что с join.
Пример выдачи:
id -- count(*) -- sum(sum)
1 -- 2 -- 5
В принципе всё ровно так, как вы и написали в условии: считаются count и sum группируя по a_id. А в целом таблица а джойнит как раз-таки ту таблицу с группировкой.
SELECT a.id, tmp.*
FROM a
LEFT JOIN (SELECT b.a_id, COUNT(b.a_id) as `count`, SUM(`sum`) as summa
FROM b
GROUP BY b.a_id
) tmp
ON tmp.a_id = a.id
В итоге если для a нет записей в b - то там будут null
http://sqlfiddle.com/#!9/35471b/8
SELECT `a`.`id`, SUM(`b`.`sum`), COUNT(*)
FROM `a`
LEFT JOIN `b` ON `a`.`id`=`b`.`a_id`
GROUP BY `a`.`id`;
На фидле получил результат как у вас
Сборка персонального компьютера от Artline: умный выбор для современных пользователей