Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте! Столкнулся со следующей проблемой...
Есть таблица t1, в которой фактически всего два поля, допустим t1.id и t1.name.
И есть таблица t2, у которой множество полей, среди которых t2.f_id = t1.id, и некое численное поле t2.c >=0.
Необходимо просуммировать все строки t2 по значению t2.c, у которых t2.f_id одинаковый. После этого необходимо вывести 20 записей t1.id, с наибольшим SUM(t2.c) где t2.f_id = t1.id.
Надеюсь понятно объяснил...
Перепробовал множество вариантов, но ни один задачу не решил до конца. На мой взгляд решение должно быть похоже на это:
SELECT SUM(t2.c) FROM t2 INNER JOIN t1 ON t2.f_id=t1.id (выводит некое число, которое меньше суммы всех значений t2.c)
но это совсем не то ,что мне необходимо...
Помогите пожалуйста разобраться с данной задачей.
Неактивен
VBlond написал:
Необходимо просуммировать все строки t2 по значению t2.c, у которых t2.f_id одинаковый.
Не совсем это понятно. Приведите пожалуйста примеры данных, и какой результат Вы хотите получить. на примере буквально нескольких строк, чтоб идею понять.
Если я правильно понял, то Вам нужно что-то такое:
Неактивен
Пример:
t1
id | name
1 first
2 second
3 third
t2
id | f_id |c
1 1 0
2 1 4
3 1 6
4 2 1
5 3 2
6 2 1
7 3 3
На выходе нужно получить:
t1.id | t1.name | Сумма
1 first 10 (0 + 4 + 6)
2 second 2 (1 + 1)
3 third 5 (2 + 3)
Нюанс в том, что t1 ~10k записей, t2 ~ 120k записей. Грубо говоря, нужно вывести топ-20 t1 по сумме t2.c для одинаковых t2.f_id
Неактивен
Приведенный мной запрос ровно это и должен делать. Вы запускали его? Правильно работает?
Отредактированно deadka (26.10.2011 01:08:43)
Неактивен
Большое спасибо! Всё работает правильно! С минимальной доработкой предложенный Вами вариант решил задачу наилучшим образом!
Неактивен
Страниц: 1