Как рассчитать среднее значение по дням в Mysql?
Есть данные
+--------------------------+----------+------+
| 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
- Большое спасибо.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для рассчета среднего значения по дням в MySQL можно воспользоваться функцией AVG() в сочетании с функцией GROUP BY. Для этого необходимо иметь столбец с данными, которые вы хотите усреднить, а также столбец с датой или временем.
Предположим, у вас есть таблица с названием "data", в которой есть столбец "value" с данными и столбец "date" с датами. Чтобы рассчитать среднее значение по дням, вы можете использовать следующий SQL запрос:
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;
Таким образом, вы сможете рассчитать средние значения по дням для нескольких столбцов одновременно.
Не забудьте заменить "data", "value", "date" и другие названия столбцов на соответствующие в вашей таблице. Используйте этот SQL запрос в вашем приложении или в среде работы с базой данных MySQL для рассчета среднего значения по дням.