Маленький вопросик по SQL
Если тебе нужно считать сумму по B, зачем тебе объединять еще и с C?
Короче, открыл для себя, что в моем mysql есть подзапросы, проблему решил типа так:
SELECT *, SUM(num)
FROM (
SELECT A.*, B.id AS id_b, count(B.id sum(B.<поле>)/count(B.id) AS num
FROM A LEFT JOIN B ON A.id = B.id_a
LEFT JOIN C ON B.id = C.id_b GROUP BY B.id ) D
GROUP BY D.id
Но мне не нравится (
Можно как-нибудь без подзапросов?
В том запросе, что ты привел, таблица C вообще не используется в выборке.
Расскажи что за задача нормальными словами.
Может там все решится грамотным JOIN'ом.
Короче, есть три таблицы. Первая связана со второй, а вторая - с третьей (через ключи). И никак иначе.
Связи такого типа: одна строка из второй может быть связана со многими из третьей, а одна строка первой может бть связана со многими из второй.
Нужно сделать такой запрос, чтобы по каждой строке из первой таблицы были выполнены различные аггрегирующие функции типа sum и count как для второй таблицы, так и для третьей.
A1, SUM(B1.field1 SUM(C1.field2)
A1, SUM(B1.field1 SUM(C2.field2)
A1, SUM(B1.field1 SUM(C3.field2)
A2, SUM(B2.field1 SUM(C4.field2)
A2, SUM(B2.field1 SUM(C5.field2)
?
A1, B1.field1+B2.field1, C1.field2+C2.field2+C3.field2+C4.field2+C5.field2+C6.field2
...
(если работать с обозначениями из моего первого поста)
Возможно нужно напильником доработать.
SELECT A.id, SUM(D.field1B SUM(D.sumC) FROM A LEFT JOIN
(SELECT b.id AS idB, b.field1 AS field1B, SUM(c.field1/COUNT(field1 AS sumC
FROM b LEFT JOIN c ON b.id=c.id
GROUP BY b.id, b.field1) AS D
ON A.id = D.idB
GROUP BY A.id
блин, отстой
мне чего-то казалось, что всегда можно без подзапросов обходиться...
Практика показывает, что даже довольно простые задачи иногда нельзя решить на SQL без подзапросов.
Просто раньше стоял mysql 3.23, я с таким даже не сталкивался, только в теории.. вот пришлось и на практике теперь.
В итоге пришли к одному и тому же решению )
Оставить комментарий
Geddi-S
Есть три таблицы - A, B, C.Соединяем их вместе, причем пусть их кортежи - это A1, B1, B2, C1, C2, C3, C4, C5, C6.
Вполне возможна, например, следующая ситуация после соединения:
Хотелось бы после GROUP BY A.id иметь возможность считать sum B.<некоторое поле>, только так, чтобы сумма велась по разным строкам B (т.е. должно быть B1+B2, а не 3*B1+3*B2).
Не подскажите, как бы грамотно составить вопрос?
Если что, mysql 4.1.21