![]() |
|
Модераторы: skyboy |
![]()
|
|
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Допустим у меня есть таблица в которой есть два интересующих меня поля field1 и field2. Значение field2 это целое число. Как вывести в порядке убывания определённое количество field1 с максимальной суммой значений field2?
Вообще, можно ли это сделать только средствами SQL, без дополнительных расчетов в скрипте? Наверное вопрос сформулирован запутанно. Ну скажем у меня в таблице несколько раз встречается field1="Вася". Надо найти сумму всех field2 которым соответствует field1="Вася" и если эта сумма максимальная то выводим field1 с суммой field2. Потом нужно найти field1 с максимальной суммой field2 среди оставшихся записей и так далее. Собственно проблема у меня с определением суммы field2 для каждого field1. Среди агрегатных функций MySQL я не нашёл подходящей. SUM вычисляет сумму всех значений в столбце, MAX находит максимальное значение в столбце, а мне надо максимальную сумму значений столбца соответствующих определённому значению в другом столбце. Это сообщение отредактировал(а) sugee - 25.2.2006, 20:49 |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Мало что понял из твои объяснений, такое попробуй
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Я пытался изложить в общем виде, получилось запутанно...
В общем, в базу записан лог Apache. Нужно вывести десять хостов с которых был максимальный трафик. Добавлено @ 21:46 Твой запрос не подходит, потому что Это сообщение отредактировал(а) sugee - 25.2.2006, 21:47 |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
sugee, структуру БД+запрос который выдает юзер&объем траффик.
Посмотри ключевое слово LIMIT\TOP(Не знаю какое в MySQL существует) -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Структура БД
Строка файла имеет такой вид: 83.69.119.43 - - [25/Dec/2005:04:12:17 +0300] "GET / HTTP/1.1" 200 17980 Одна запись в таблице - это одна строка файла. Юзер ничего не выдаёт, он просто заходит по соответствующей ссылке на страницу где выведена таблица с десятью хостами с наибольшим трафиком и напротив каждого хоста его суумарный трафик. Сложность в том что каждый IP-шник может встречаться в лог-файле сколь угодно раз, значит в базе может быть сколь угодно записей с таким значением поля host. Надо сосчитать суммарный трафик для каждого хоста а затем вывести "десятку лидеров". А LIMIT он ведь просто ограничивает количество выводимых записей... |
|||
|
||||
| DeadSoul |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
или
Пробуй. У меня мускуля нет. P.S. Подвиг евросети хочешь повторить -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
||||
|
|||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Неа, сочетание host,SUM(trafic) в селекте MySQL вообще не переваривает. А потом как можно сортировать по SUM(trafic), это ведь
сумма всех значений столбца. |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
sugee, а GROUP BY на какой нужон?
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Вот так выводит вроде 10 хостов с максимальным трафиком, но не суммарным трафиком естественно, а за одно посещение. Ограничение на 10 строк я делаю в скрипте. ORDER BY SUM(trafic) выдает ошибку "Неправильное юзание функции GROUP" |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Такой сработает:
И назови свою версию мускула. -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
В самом деле, как будто бы работает.
Я сейчас еще немного в своем коде поковыряюсь, приведу кое-что в порядок... Но если действительно правильно, то за мной не заржавеет! А версия мускула 4.1. |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Вот теперь только одного не пойму, а как мне добраться до суммарного трафика для каждого выбранного хоста?
Ведь SUM(trafic) это весь суммарный трафик, со всех хостов. |
|||
|
||||
| Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 20 Всего: 40 |
sum() даст сумму всех значений столбца если нет group by.
При наличиии group by сумма будет считаться для конкретной группы. И это относится к любой аггрегатной функции (sum, count, avg, min,max и тд) -------------------- Бонифаций. |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Бонифаций, спасибо, не знал этого.
|
|||
|
||||
| Me10di0us |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.2.2006 Репутация: нет Всего: нет |
В таких случаях я использовал такой запрос
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |