@b4rret

Как рассчитать среднее значение по дням в 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


А вот как добавить к этому "COUNT(DISTINCT user_ID)" не могу разобраться. Версия Mysql 5.7
  • Вопрос задан
  • 1450 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Вы можете использовать следующий запрос:

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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы