Хорошо, я новичок в SQL, поэтому задаю этот вопрос.
У меня есть таблица под названием: kpi_notification_metrics_per_month В этой таблице 2 столбца:
Я хочу создать новую таблицу, в которой будет отображаться
Для столбца NotificationCount.
Примерная таблица:
Date NotificationCount
01/04/2018 00:00 0
31/03/2018 00:00 0
25/03/2018 00:00 0
24/03/2018 00:00 0
22/03/2018 00:00 0
18/03/2018 00:00 0
17/03/2018 00:00 0
14/03/2018 00:00 0
11/03/2018 00:00 0
07/04/2018 00:00 1
26/03/2018 00:00 1
21/03/2018 00:00 1
15/03/2018 00:00 1
13/03/2018 00:00 1
12/03/2018 00:00 1
10/03/2018 00:00 1
08/04/2018 00:00 2
30/03/2018 00:00 2
09/03/2018 00:00 2
08/03/2018 00:00 2
20/03/2018 00:00 3
19/03/2018 00:00 4
02/04/2018 00:00 9
23/03/2018 00:00 11
27/03/2018 00:00 22
03/04/2018 00:00 28
28/03/2018 00:00 34
04/04/2018 00:00 39
05/04/2018 00:00 43
29/03/2018 00:00 47
06/04/2018 00:00 50
16/03/2018 00:00 140
Ожидаемые результаты:
Mean Median Mode
13.90625 1 0
@jarlh ok, таблица и ожидаемые результаты добавлены
Какую СУБД вы используете?
Как получить значение этого режима 0?
@jarlh: MODE - это значение, которое встречается чаще всего. Здесь 0 (встречается девять раз). en.wikipedia.org/wiki/Mode_(statistics)
@ThorstenKettner, спасибо! (Жесткое напоминание о том, как давно я закончил учебу ...)
Возможный дубликат Как получить среднее значение, медианное значение, режим и диапазон в одном запросе выбора?
Среднее: используйте Avg()
Select Avg(NotificationCount)
From kpi_notification_metrics_per_month
Медиана: упорядочьте по ASC и DESC для TOP 50 Percent
данных, найдите средний.
Select ((
Select Top 1 NotificationCount
From (
Select Top 50 Percent NotificationCount
From kpi_notification_metrics_per_month
Where NotificationCount Is NOT NULL
Order By NotificationCount
) As A
Order By NotificationCountDESC) +
(
Select Top 1 NotificationCount
From (
Select Top 50 Percent NotificationCount
From kpi_notification_metrics_per_month
Where NotificationCount Is NOT NULL
Order By NotificationCount DESC
) As A
Order By NotificationCount Asc)) / 2
Режим: получить количество каждого набора значений и получить первую строку в порядке убывания.
SELECT TOP 1 with ties NotificationCount
FROM kpi_notification_metrics_per_month
WHERE NotificationCount IS Not NULL
GROUP BY NotificationCount
ORDER BY COUNT(*) DESC
Все работало в Sql Server 2014.
Ссылка: http://blogs.lessthandot.com/index.php/datamgmt/datadesign/calculating-mean-median-and-mode-with-sq/
Вот как это сделать в Oracle:
select
avg(notificationcount) as statistic_mean,
median(notificationcount) as statistic_median,
stats_mode(notificationcount) as statistic_mode
from mytable;
Нет необходимости в другом столе. Вы можете (и должны) всегда запрашивать данные по отдельности. Для удобства вы можете создать представление, как предложил jarlh в комментариях к запросу.
Добавьте образцы данных таблицы и ожидаемый результат - все в виде форматированного текста, а не изображений. И создайте представление вместо другой таблицы. (Чтобы сохранить диск и обеспечить целостность данных.)