Перейти к содержимому

Фотография

SQL запросMySQL


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1
Tzar

Tzar
  • Завсегдатай
  • 242 сообщений
требуется вывести инфу из базы в таком виде:

Страна | Кол-во повторов | Прирост

Россия | 122 | +20
Украина | 109 | +1
........


Дано:

posted date, country int(3)

"прирост" - разница между кол-вом повторов за сегодня и предыдущий день

Спасибо за внимание.
  • 0

#2
kornel

kornel
  • В доску свой
  • 9 069 сообщений
В mysql в один запрос не сделаешь. Минимум в 3
  • 0

#3
Sly

Sly
  • Постоялец
  • 322 сообщений

требуется вывести инфу из базы в таком виде:
Страна | Кол-во повторов | Прирост
Россия | 122 | +20
Украина | 109 | +1
........
Дано:
posted date, country int(3)

Если есть возможность изменить структуру таблицы или создать новую, то можно прирост считать и обновлять при вводе нового значения и записывать либо в новое поле либо в новую таблицу.
  • 0

#4
Den

Den
  • Завсегдатай
  • 138 сообщений
а если вот так: select country, posted, (select posted form table where date = today)-(select posted form table where date = yesterday)  from table where date = today

я правда не проверял, пример из головы
  • 0

#5
ЖуТь

ЖуТь
  • В доску свой
  • 2 820 сообщений
ну считаешь прирост, селект инту #темпдб типа каунт вхере дате такойта - каунт вхере дате сикойта по кантрям и с кантрей в темпоральную таблицу.
далее селект из двух таблиц.
всевот делов.
  • 0

#6
Tzar

Tzar
  • Завсегдатай
  • 242 сообщений
Kornel

можно уложиться в один.

Sly

порядок записей примерно таков:

1  22-08-2002
1  22-08-2002
1  22-08-2002
1  22-08-2002
9  22-08-2002
4  22-08-2002
.....

добавлять дополнительное поле для хранения прироста нет смысла, так как это лучше вычислять

Den

для подсчета кол-ва повторов я использую такой запрос:

SELECT country,count(country) as ic FROM users GROUP BY country HAVING ic>=0 ORDER BY ic DESC

вложенных запросов в mysql пока нет

Жуть

Ты как всегда торопишься....
попробуй написать нормальный запрос из того , что ты надиктовал :fie:
  • 0

#7
kornel

kornel
  • В доску свой
  • 9 069 сообщений

SELECT country,count(country) as ic FROM users GROUP BY country HAVING ic>=0 ORDER BY ic DESC

И что ты получаешь? Количество повторов по состоянию на время выполнения запроса.
А с твоим запросом - HAVING ic>=0 совершенно не нужен. количество чего бы то ни было не может быть отрицательным, т-ч нехрен анализатор грузить.
Вообщемто можно сделать все 2 запроса. Один вчерашние данные вылиывает в хип-таблицу, второй сравнивает вчерашние данные с сегоднишними.
  • 0

#8
Den

Den
  • Завсегдатай
  • 138 сообщений

а если вот так: select country, posted, (select posted form table where date = today)-(select posted form table where date = yesterday)  from table where date = today


mySQL говоришь, тогда так попробуй:
select a.country, a.posted, a.posted -b.posted form table a, table b where a.date = today and b.date = yesterday
  • 0

#9
Tzar

Tzar
  • Завсегдатай
  • 242 сообщений
Kornel

И что ты получаешь? Количество повторов по состоянию на время выполнения запроса.

Верно. Я указал , что это для _подсчета кол-ва повторов_.

А с твоим запросом - HAVING ic>=0 совершенно не нужен. количество чего бы то ни было не может быть отрицательным, т-ч нехрен анализатор грузить.

Это ограничение снизу.  :)

Den

mySQL говоришь, тогда так попробуй:
select a.country, a.posted, a.posted -b.posted form table a, table b where a.date = today and b.date = yesterday


основную мысль я вроде уловил, однако код в таком виде работать не будет
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.