Как рассчитать медиану по нескольким столбцам в Google BigQuery? - PullRequest
1 голос
/ 23 апреля 2019

Я создаю запрос для расчета средней посещаемости с двух разных сайтов по дням.

Вывод должен выглядеть следующим образом:

+------------+---------+---------------+
|    date    | website | median_visits |
+------------+---------+---------------+
| 2019-04-01 | A       | median_value  |
| 2019-04-01 | B       | median_value  |
| 2019-04-02 | A       | median_value  |
| 2019-04-02 | B       | median_value  |
| 2019-04-03 | A       | median_value  |
| 2019-04-03 | B       | median_value  |
+------------+---------+---------------+

Вот как выглядит моя таблица (всего 20 000 строк):

+------------+---------+--------+
|    date    | website | visits |
+------------+---------+--------+
| 2019-04-01 | A       |   10.0 |
| 2019-04-01 | B       |   14.0 |
| 2019-04-02 | A       |   85.0 |
| 2019-04-03 | A       |   75.0 |
| 2019-04-02 | B       |    3.0 |
| 2019-04-02 | B       |   45.0 |
| 2019-04-01 | A       |   12.0 |
| 2019-04-03 | A       |   44.0 |
| 2019-04-01 | A       |   99.0 |
+------------+---------+--------+

Что бысамый эффективный способ запросить желаемый результат?Я сейчас использую:

SELECT DISTINCT date, website, median_visits
FROM
 (SELECT  date, website, PERCENTILE_CONT(visits, 0.5) 
  OVER(PARTITION BY date, website) AS median_visits
  FROM table)

1 Ответ

1 голос
/ 23 апреля 2019

Ниже для BigQuery Standard SQL - я не могу утверждать, что это лучший.Я даже не могу гарантировать, что это лучше - но на основании моего тестирования я вижу лучший план выполнения и использование слотов.Итак, вы можете попробовать и посмотреть с вашими данными

#standardSQL
SELECT date, website, 
  (SELECT PERCENTILE_CONT(visit, 0.5) OVER() 
    FROM UNNEST(visits) visit LIMIT 1
  ) AS median_visits
FROM (
  SELECT date, website, ARRAY_AGG(visits) visits
  FROM `project.dataset.table`
  GROUP BY date, website
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...