SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 19.10.2010 11:33:24

Yuta
Участник
Зарегистрирован: 19.10.2010
Сообщений: 3

Нужен совет по агрегации лога

Здравствуйте. В первую очередь интересно какую часть задачи можно и лучше переложить на сам MySQL.
Задача в следущем (главная часть), есть таблица:


+------------+------------+------------+---------+-------+
| account_id | src_ip     | dst_ip     | packets | bytes |
+------------+------------+------------+---------+-------+
|          5 | 9999999999 | 8888888888 |       3 |   414 |
|          5 | 9999999999 | 8888888888 |       2 |   306 |
+------------+------------+------------+---------+-------+
 

Нужно по каждому "account_id" найти поля с одинаковым "src_ip" и сложить значения их "packets" и "bytes" в одно поле. Результат желательно перебросить в другую таблицу (или в temporary). Вариант:

CREATE TEMPORARY TABLE result AS
SELECT account_id, src_ip, dst_ip, SUM(packets) AS packets, SUM(bytes) AS bytes
FROM logs
GROUP BY account_id, src_ip
HAVING COUNT(src_ip) > 1
UNION ALL
SELECT *
FROM logs
GROUP BY account_id, src_ip
HAVING COUNT(src_ip) < 2;
 

Что можно еще сделать? DISTINCT? Так же "dst_ip" может меняться, его нужно добавлять в GROUP BY?

Буду благодарен за советы.

Неактивен

 

#2 19.10.2010 15:38:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Нужен совет по агрегации лога

А зачем UNION и HAVING?

Неактивен

 

#3 19.10.2010 16:20:52

Yuta
Участник
Зарегистрирован: 19.10.2010
Сообщений: 3

Re: Нужен совет по агрегации лога

HAVING и DISTINCT это два известных мне способа поиска дубликатов, UNION чтобы весь этот ужас объединить. От сюда трудность, что сложив нужные поля (packets, bytes) одинаковых src_ip в одно поле добавить к ним поля у которых по src_ip дубликатов не было. Наверно можно заменить UNION на JOIN, но и тут разве обойтись без проверок или вовсе повтора товоже, только в других местах?

Неактивен

 

#4 19.10.2010 16:34:17

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Нужен совет по агрегации лога

с учетом dst_ip

CREATE TEMPORARY TABLE result AS
SELECT account_id, src_ip, dst_ip, SUM(packets) AS packets, SUM(bytes) AS bytes
FROM logs
GROUP BY account_id, src_ip, dst_ip


UNION явно лишний, да и HAVING тожек пожалуй не нужен. SUM и GROUP BY нормально все агрегируют, не обращая внимания на количество записей.

Неактивен

 

#5 19.10.2010 16:59:48

Yuta
Участник
Зарегистрирован: 19.10.2010
Сообщений: 3

Re: Нужен совет по агрегации лога

Спасибо за ответы, сам себе все усложнил.

Неактивен

 

Board footer

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