Как правильно использовать avg и раздел? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть данные, содержащие user_ids, visitStartTime и product prices, которые были просмотрены пользователем.Я пытаюсь получить среднюю и максимальную цену за посещение каждого пользователя, но мой запрос не производит расчеты по разделу (user + visitStartTime), он выполняет расчеты только по user_id разделу.

Вот мой запрос:

select distinct fullVisitorId ,visitStartTime,
    avg(pr) over (partition by visitStartTime,fullVisitorId) as avgPrice,
    max(pr) over (partition by fullVisitorId,visitStartTime) as maxPrice
from dataset

Вот что я получил:

+-----+----------------------+-----------------+----------+----------+--+
| Row |    fullVisitorId     |    visitStartTi | avgPrice | maxPrice |  |
+-----+----------------------+-----------------+----------+----------+--+
|   1 |    64217461724617261 |      1538478049 |    484.5 |    969.0 |  |
|   2 |    64217461724617261 |      1538424725 |    484.5 |    969.0 |  |
+-----+----------------------+-----------------+----------+----------+--+

Чего мне не хватает в моем запросе?

Пример данных

+---------------+----------------+---------------+
| FullVisitorId | VisitStartTime | ProductPrice  |
+---------------+----------------+---------------+
|           123 |       72631241 |           100 |
|           123 |       72631241 |           250 |
|           123 |       72631241 |            10 |
|           123 |       73827882 |            70 |
|           123 |       73827882 |            90 |
+---------------+----------------+---------------+

Желаемый результат:

+-----+---------------+--------------+----------+----------+
| Row | fullVisitorId | visitStartTi | avgPrice | maxPrice |
+-----+---------------+--------------+----------+----------+
|   1 |           123 |     72631241 |    120.0 |    250.0 |
|   2 |           123 |     73827882 |     80.0 |     90.0 |
+-----+---------------+--------------+----------+----------+

1 Ответ

2 голосов
/ 11 апреля 2019

В этом случае вам не нужен раздел по.

Попробуйте это:

select fullVisitorId ,visitStartTime, avg(ProductPrice) avgPrice ,max(ProductPrice) maxPrice
from sample
group by FullVisitorId,VisitStartTime;

(запрос довольно стандартный, поэтому я думаю, что вы можете использовать его в BigQuery)

Вот вывод с использованием PostgreSQL: DB <> FIDDLE

Обновление

Также работает с BigQuery Standard SQL:

#standardSQL
SELECT 
  FullVisitorId, 
  VisitStartTime, 
  AVG(ProductPrice) as avgPrice,
  MAX(ProductPrice) as maxPrice
FROM `project.dataset.table`
GROUP BY FullVisitorId, VisitStartTime 

Если вы хотите проверить это:

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 123 FullVisitorId, 72631241 VisitStartTime, 100 ProductPrice 
  UNION ALL SELECT 123, 72631241, 250
  UNION ALL SELECT 123, 72631241, 10
  UNION ALL SELECT 123, 73827882, 70
  UNION ALL SELECT 123, 73827882, 90
)

SELECT 
  FullVisitorId, 
  VisitStartTime, 
  AVG(ProductPrice) as avgPrice,
  MAX(ProductPrice) as maxPrice
FROM `project.dataset.table`
GROUP BY FullVisitorId, VisitStartTime  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...