В поисках MAX столбец BigQuery SQL - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь «нормализовать» данные в столбце, чтобы они находились в диапазоне от 0 до 1. Первоначально я планировал найти значение MAX для столбца и выполнить следующий расчет: column / MAX (столбец). У меня проблема в том, что вывод выглядит так

enter image description here

Это продолжается так ...

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

Вот запрос, который я использовал, чтобы найти просмотры страниц (данные взяты из GA и схема не изменилась по умолчанию):

SELECT
  pageTitle, 
  COUNT(*) AS pageviews

FROM (
  SELECT
     hits.page.pageTitle,
     hits.type,

    FROM
    `medicine-matter.131114627.ga_sessions_*` AS GA,
    UNNEST(GA.hits) AS hits

    WHERE
    type = 'PAGE'

     )
    GROUP BY
    pageTitle

    ORDER BY
    pageviewDESC

Затем я вызываю просмотры страниц в другой таблице вот так:

SELECT
pageviews,
MAX(pageviews) as MAX,
pageviews/ MAX(pageviews) as normal_pageview


FROM
`table`
WHERE
pageviews > 1

group by 
pageTitle,
pageviews

ORDER BY
normal_pageview DESC

Я очень плохо знаком с SQL, поэтому я могу только извиниться, если я делаю что-то абсолютно дебильное c.

Ответы [ 2 ]

2 голосов
/ 13 марта 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT pageviews, 
  MAX(pageviews) OVER() max_pageviews,
  ROUND(pageviews / MAX(pageviews) OVER(), 2) normal_pageviews
FROM `project.dataset.table` 

Вы можете протестировать, поиграть с выше, используя пример данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 22 pageviews UNION ALL
  SELECT 4 UNION ALL
  SELECT 14 UNION ALL
  SELECT 99 UNION ALL
  SELECT 24 UNION ALL
  SELECT 4 UNION ALL
  SELECT 8 
)
SELECT pageviews, 
  MAX(pageviews) OVER() max_pageviews,
  ROUND(pageviews / MAX(pageviews) OVER(), 2) normal_pageviews
FROM `project.dataset.table`  

с результатом

Row pageviews   max_pageviews   normal_pageviews     
1   22          99              0.22     
2   4           99              0.04     
3   14          99              0.14     
4   99          99              1.0  
5   24          99              0.24     
6   4           99              0.04     
7   8           99              0.08       

Надеюсь, что вы легко сможете приспособиться выше к реальному случаю

0 голосов
/ 25 марта 2020

Еще одно интересное решение для BigQuery Standard SQL с помощью функции предварительной обработки BigQuery ML - ML.MIN_MAX_SCALER

Масштабирует числовое выражение до [0, 1], ограниченное MIN и MAX по всем строкам

#standardSQL
SELECT pageviews, 
  ROUND(ML.MIN_MAX_SCALER(pageviews) OVER(), 2) normal_pageviews
FROM `project.dataset.table`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...