powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Составить вложенный вопрос
12 сообщений из 12, страница 1 из 1
Составить вложенный вопрос
    #39887964
Alpinist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет люди бодрые, ищу помощи в составлении правильного запроса.
Пытался своими силами 3 дня, но максимум смог сделать общее количество покупок для курса,
А задача следующая:

Написать запрос, который выведет для каждого курса среднее количество покупок в месяц

Я смог сделать только общее количество покупок

SELECT name, COUNT(subscription_date) FROM Courses
JOIN Subscriptions ON Courses.id = Subscriptions.course_id
GROUP BY Subscriptions.course_id;

А так же среднее за год

SELECT name, COUNT(subscription_date) / 12 FROM Courses
JOIN Subscriptions ON Courses.id = Subscriptions.course_id
GROUP BY Subscriptions.course_id;

https://prnt.sc/pvrted
https://prnt.sc/pvrtl8
https://prnt.sc/pvrtsa

Заранее спасибо!
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39887971
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А про агрегирующую функцию AVG знаете чего?
если она есть в этом диалекте...

COUNT(subscription_date) / 12
Это явно не "среднее за год", а двенадцатая часть общего количества.
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39888006
Alpinist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Слышал, пробовал.
Пока не получается.

SELECT name, AVG(COUNT(subscription_date)) FROM Courses
JOIN Subscriptions ON Courses.id = Subscriptions.course_id
GROUP BY Subscriptions.course_id;

Если так, то ошибка по групировке
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39888013
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AVG(COUNT(subscription_date)) - неправильно
AVG(subscription_date) - правильно
COUNT(subscription_date) - правильно
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39888031
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"для каждого курса среднее количество покупок в месяц"
Т.Е сначала надо подсчитать количество покупок в разрезе курсов и месяцев
А потом из получившегося посчитать среднее в разрезе курсов.
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39888056
Alpinist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

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

Subscriptions
course id
1 2 2018-01-01 00:00:00
1 10 2018-04-11 00:00:00
2 1 2018-01-02 00:00:00
2 11 2018-04-12 00:00:00
3 2 2018-01-03 00:00:00
3 12 2018-04-13 00:00:00
4 3 2018-01-04 00:00:00
4 13 2018-04-14 00:00:00
5 4 2018-01-05 00:00:00
5 14 2018-04-15 00:00:00
6 5 2018-01-06 00:00:00

Дата это оформленная подписка. Она же месяц.
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39888085
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alpinist
среднее количество покупок в месяц
Что такое "среднее количество покупок"? Если 6 месяцев покупать по 100, а другие не покупать вообще - среднее 100 или 50? или мож вообще какая хитрая метода, да ещё зависящая от того, в каких конкретно месяцах покупалось?
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39888114
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alpinist

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


Т.Е у тебя данные уже агрегированы в разрезе "курсов" и "месяцев"
только месяц записан извратно.
Тогда тебе просто надо сгруппировать по курсу и месяцу + применить AVG к "количество покупок за месяц"

+ думать над тем. что написал Akina
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39888915
Alpinist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ответ:

SELECT name,count(MONTH(s.subscription_date))/(TIMESTAMPDIFF(MONTH,min(s.subscription_date),max(s.subscription_d) as avgMonth FROM courses c JOIN subscriptions s ON c.id = s.course_id GROUP BY c.name;
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39888938
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ писать научись

Код: sql
1.
2.
3.
4.
5.
SELECT 
name,
count(MONTH(s.subscription_date))/(TIMESTAMPDIFF(MONTH,min(s.subscription_date),max(s.subscription_d) as avgMonth
  FROM courses c JOIN subscriptions s ON c.id = s.course_id 
GROUP BY c.name
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39888955
Alpinist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Спасибо, чемпион мира по писанию и каканию :D
...
Рейтинг: 0 / 0
Составить вложенный вопрос
    #39890040
L_I_IG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вам нужно посчитать сколько раз каждый курс был куплен в течение каждого месяца. (подзапрос) А потом взять среднее от этого количества для каждого курса. (Запрос, который будет использовать данные первого подзапроса)

Зачем применять аггрегирование для даты подписки совершенно не понятно, месяц и год тащите из даты и по ним группируйте, считая id курса.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Составить вложенный вопрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]