SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.10.2011 00:35:16

VBlond
Участник
Зарегистрирован: 23.10.2011
Сообщений: 7

Суммирование численных значений строк, объединенных одинаковым свойством

Здравствуйте! Столкнулся со следующей проблемой...

Есть таблица 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)

но это совсем не то ,что мне необходимо...
Помогите пожалуйста разобраться с данной задачей.

Неактивен

 

#2 26.10.2011 00:44:53

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Суммирование численных значений строк, объединенных одинаковым свойством

VBlond написал:

Необходимо просуммировать все строки t2 по значению t2.c, у которых t2.f_id одинаковый.

Не совсем это понятно. Приведите пожалуйста примеры данных, и какой результат Вы хотите получить. на примере буквально нескольких строк, чтоб идею понять.

Если я правильно понял, то Вам нужно что-то такое:

SELECT t1.id,s.sum_c FROM t1 INNER JOIN (SELECT `f_id`, sum(`c`) sum_c FROM `t2` GROUP BY  `f_id`) s  ON t1.id=s.f_id ORDER BY 2 desc limit 20;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 26.10.2011 00:54:24

VBlond
Участник
Зарегистрирован: 23.10.2011
Сообщений: 7

Re: Суммирование численных значений строк, объединенных одинаковым свойством

Пример:

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

Неактивен

 

#4 26.10.2011 01:08:15

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Суммирование численных значений строк, объединенных одинаковым свойством

Приведенный мной запрос ровно это и должен делать. Вы запускали его? Правильно работает?

SELECT t1.id,t1.name,s.sum_c FROM t1 INNER JOIN (SELECT `f_id`, sum(`c`) sum_c FROM `t2` GROUP BY  `f_id`) s  ON t1.id=s.f_id ORDER BY 3 desc limit 20;

Отредактированно deadka (26.10.2011 01:08:43)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 26.10.2011 21:31:23

VBlond
Участник
Зарегистрирован: 23.10.2011
Сообщений: 7

Re: Суммирование численных значений строк, объединенных одинаковым свойством

Большое спасибо! Всё работает правильно! С минимальной доработкой предложенный Вами вариант решил задачу наилучшим образом!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson