Помогите с SQL-запросом.
Здравствуйте.
Помогите, кто знает!
Есть таблица A с полями a и b.
И есть таблица B с полями c и d.
Я должен сначала сделать такой запрос:
SELECT А.а, AVG(A.b) AS avgb FROM A GROUP BY A.a ORDER BT avgb DESC;
И всё бы было замечательно, если бы мне не надо было посчитать сумму
значений поля d в таблице B, где a=c. Причём записей в таблице B может
таких и не быть.
Я делаю:
SELECT А.а, AVG(A.b) AS avgb, SUM(B.d) AS sumd FROM A LEFT JOIN B ON
A.a = B.c GROUP BY A.a ORDER BT avgb DESC;
И вот в этом месте получается ерунда: вместо реальных значений суммы
получаются непомерно большие.
Есть, конечно, решение: сделать первый запрос, а потом, по каждой
строчке делать отдельные запросы на сумму. Но, думаю, это будет совсем
не рационально. Как можно правильно построить запрос, чтобы значения
были реальными?
Что-нибудь вроде:
SELECT
DISTINCT
A.a,
SUM(B.d)
FROM A
LEFT JOIN B ON (A.a=B.c)
WHERE
B.d IS NOT NULL
Покатит? Либо объясни задачу подробнее :-) Я пока не понимаю зачем
одним запросом пытаться получить среднее, сумму, и еще группировать
и сортировать. Так не делается - делают вьюхи (view) и временные
таблицы.