Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сложный запросю Средние показатели 
:(
    Опции темы
Areostar
Дата 14.1.2021, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1090
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Структура данных примерно следущая:

Код

CREATE TABLE `posts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `title` varchar(120) COLLATE utf8_unicode_ci NOT NULL,
  `body` text COLLATE utf8_unicode_ci NOT NULL,
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `created_at` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(36) COLLATE utf8_unicode_ci NOT NULL,
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `created_at` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `posts`
  ADD PRIMARY KEY (`id`);


ALTER TABLE `users`
  ADD PRIMARY KEY (`id`);


составить запрс для получения следуюшего ответа

id пользователя 
среднее количество постов созданных за месяц и по недельно

Понимаю что тут Group By и join сочитать придётся. а как среднее за месяц и по неделям вычислять? если в базе не необределённое количество месяцев? Можно ли это сделать в рамках одного запроса?
PM MAIL   Вверх
Akina
Дата 14.1.2021, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20489
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 453



Цитата(Areostar @  14.1.2021,  10:50 Найти цитируемый пост)
составить запрс для получения следуюшего ответа

Слишком невменяемо.

Добавь INSERT INTO с тестовыми данными (1 юзер, 10-15 записей за ~2.5 месяца) и требуемый ответ строго для э\тих данных с пояснением по каждому числу результата.

И чётко определись, какую из двух дат учитывать, а какую игнорировать.

Ну а из совсем общих соображений - просто что-нибудь типа

Код

SELECT users.name, 
       COUNT(posts.user_id) / TIMESTAMPDIFF(WEEK, MIN(posts.created_at), MAX(posts.created_at)) AVG_week, 
       COUNT(posts.user_id) / TIMESTAMPDIFF(MONTH, MIN(posts.created_at), MAX(posts.created_at)) AVG_month
FROM users
JOIN posts ON users.id = posts.user_id
GROUP BY users.name

или
Код

SELECT users.name, 
       COUNT(posts.user_id) / TIMESTAMPDIFF(DAY, MIN(posts.created_at), MAX(posts.created_at)) * 7 AVG_week, 
       COUNT(posts.user_id) / TIMESTAMPDIFF(DAY, MIN(posts.created_at), MAX(posts.created_at)) * 30 AVG_month
FROM users
JOIN posts ON users.id = posts.user_id
GROUP BY users.name




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0915 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.