Как рассчитать среднее значение по дням в Mysql?

Ссылка скопирована
1 ответ

Есть данные
+--------------------------+----------+------+
| date_time | user_id | price |
+--------------------------+----------+------+
| 2020-01-01 01:05:30 | 1 | 10 |
| 2020-01-01 02:45:33 | 3 | 20 |
| 2020-03-25 11:10:15 | 66 | 10 |
| 2020-04-21 00:40:00 | 21 | 40 |
| 2020-04-22 15:00:00 | 70 | 30 |
| 2020-04-22 20:00:00 | 21 | 10 |
+--------------------------+----------+------+

Нужно получить данные сгруппированные по каждому дню определенным образом. Каждый день считается сумма за предыдущие дни включая текущий и COUNT(DISTINCT user_id) также за предыдущие дни и включая текущий
+-------------------------------------+---------------+
| day | COUNT(DISTINCT user_id) | SUM(price) |
+--------------------------------------+--------------+
т. е. для 2020-01-01 будет следующее COUNT(DISTINCT 1, 3) = 2, sum = 10+20
+---------------+--+-----+
| 2020-01-01 | 2 | 30 |
+---------------+--+-----+
для 2020-04-22 будет COUNT(DISTINCT 1, 3, 66, 21, 70, 21) = 5, sum = 10+20+10+40+30+10
+---------------+--+-----+
| 2020-01-01 | 5 | 120 |
+---------------+--+-----+

Сумму сгруппированную по дням пока вычисляют так:

SELECT sort_date, (@s := @s + temp.sum) sum  	FROM ( 		SELECT SUM(price) as sum, DATE(date_time) as sort_date 		   FROM table 		   GROUP sort_date 	) temp

SELECT sort_date, (@s := @s + temp.sum) sum FROM ( SELECT SUM(price) as sum, DATE(date_time) as sort_date FROM table GROUP sort_date ) temp

А вот как добавить к этому "COUNT(DISTINCT user_ID)" не могу разобраться. Версия Mysql 5.7

Дополнительно:

Вы можете использовать следующий запрос:

select dates.date_time dates, count(distinct tbl.user_id), sum(tbl.price) from ( 	select distinct date(tbl.date_time) date_time from tbl ) dates join tbl on dates.date_time >=  date(tbl.date_time) group by dates.date_time order by dates.date_time;

select dates.date_time dates, count(distinct tbl.user_id), sum(tbl.price) from ( select distinct date(tbl.date_time) date_time from tbl ) dates join tbl on dates.date_time >= date(tbl.date_time) group by dates.date_time order by dates.date_time;

Test SQL query online

  • Большое спасибо.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Для рассчета среднего значения по дням в MySQL можно воспользоваться функцией AVG() в сочетании с функцией GROUP BY. Для этого необходимо иметь столбец с данными, которые вы хотите усреднить, а также столбец с датой или временем.

Предположим, у вас есть таблица с названием "data", в которой есть столбец "value" с данными и столбец "date" с датами. Чтобы рассчитать среднее значение по дням, вы можете использовать следующий SQL запрос:

SELECT DATE, AVG(VALUE) AS average_value
FROM DATA
GROUP BY DATE;

SELECT date, AVG(value) AS average_value FROM data GROUP BY date;

Этот запрос выберет уникальные даты из столбца "date" и рассчитает среднее значение столбца "value" для каждой даты. Результатом будет таблица с двумя столбцами: "date" и "average_value".

Если у вас есть несколько столбцов с данными, которые вы хотите усреднить, вы можете добавить их в функцию AVG() через запятую, например:

SELECT DATE, AVG(value1) AS average_value1, AVG(value2) AS average_value2
FROM DATA
GROUP BY DATE;

SELECT date, AVG(value1) AS average_value1, AVG(value2) AS average_value2 FROM data GROUP BY date;

Таким образом, вы сможете рассчитать средние значения по дням для нескольких столбцов одновременно.

Не забудьте заменить "data", "value", "date" и другие названия столбцов на соответствующие в вашей таблице. Используйте этот SQL запрос в вашем приложении или в среде работы с базой данных MySQL для рассчета среднего значения по дням.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно