ПРОЦЕНТИЛЬ_ДИСК с разделением по мере агрегирования

# #sql #google-bigquery

Вопрос:

Я агрегировал таблицу с несколькими значениями для каждого дня в медианы, сгруппированные в день.

Дата ID Доход
2021-07-11 1 1
2021-07-11 2 5
2021-07-12 1 12
2021-07-12 2 17

До сих пор этот запрос делал свою работу за меня:

   SELECT
  Bike.date date,
  PERCENTILE_DISC( IFNULL(Bike.NetB2CRevenue, 0), 0.5 ) OVER(PARTITION BY Bike.date ) 
        AS MedianRevenuePer,

   FROM #Table as Bike
 

Должен вернуться:

Дата МедианРевенуеПер
2021-07-11 3
2021-07-12 14.5

Вместо этого он возвращается:

Дата МедианРевенуеПер
2021-07-11 3
2021-07-11 3
2021-07-12 14.5
2021-07-12 14.5

Теперь я знаю, что своего рода «Группа по 2» может решить проблему, но в данном случае это неприменимо, так как это часть более крупного запроса.

Какие еще методы я могу использовать, кроме «Группирования»?

Ответ №1:

Воспользуйся SELECT DISTINCT :

 SELECT DISTINCT b.date date,
       PERCENTILE_DISC( COALESCE(b.NetB2CRevenue, 0), 0.5 ) OVER (PARTITION BY Bike.date) AS MedianRevenuePer,
FROM #Table b;