Как создать новую таблицу SQL со средним значением, медианой и режимом?

Хорошо, я новичок в SQL, поэтому задаю этот вопрос.

У меня есть таблица под названием: kpi_notification_metrics_per_month В этой таблице 2 столбца:

  • Дата
  • NotificationCount

Я хочу создать новую таблицу, в которой будет отображаться

  • Иметь в виду
  • Медиана
  • Режим

Для столбца 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 22.10.2018 15:21

@jarlh ok, таблица и ожидаемые результаты добавлены

marekparsnip 22.10.2018 15:31

Какую СУБД вы используете?

Zack 22.10.2018 15:35

Как получить значение этого режима 0?

jarlh 22.10.2018 15:35

@jarlh: MODE - это значение, которое встречается чаще всего. Здесь 0 (встречается девять раз). en.wikipedia.org/wiki/Mode_(statistics)

Thorsten Kettner 22.10.2018 15:37

@ThorstenKettner, спасибо! (Жесткое напоминание о том, как давно я закончил учебу ...)

jarlh 22.10.2018 15:45
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
7
624
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Среднее: используйте 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 в комментариях к запросу.

Другие вопросы по теме