2017-01-23 2 views
1

Использование Big Query, я пытаюсь запросить

количество (отчетливый цв), граф (отчетливое седловины) над (раздел по col2)
Запрашивание как совокупный и аналитический агрегат на тот же запрос Big Query

Но я получаю непредвиденную ошибку.

Вот шаблон запроса я пытаюсь выполнить:

SELECT 
      country, 
      partner, 
      segment_id, 
      COUNT(DISTINCT pv_id) pvs, 
      COUNT(DISTINCT pv_id) over(PARTITION BY country) country_total_pvs 
FROM (...) 
GROUP BY 
      country, 
      partner, 
      segment_id 

И ошибки я получаю:

Error: Expression 'pv_id' is not present in the GROUP BY list

Без 5-го столбца (аналитический счет), то запрос выполняется без ошибок.

Мысли?

Большое спасибо!

+0

выборки данных и желаемые результаты могут объяснить то, что вы хотите сделать. Как написано, запрос недействителен, поэтому он на самом деле не передает ваши намерения. –

+0

Здесь вы можете взять следующий код, например:
'ВЫБРАТЬ язык, название, COUNT (DISTINCT contirbutor_username), COUNT (DISTINCT contirbutor_username) по ( PARTITION BY языка) ОТ [BigQuery-общественно-данных : samples.wikipedia] GROUP BY язык, название 'то, что я действительно хочу иметь, - это результат группировки разных размеров. –

ответ

1

должно работать, но я предполагаю, что это не то, что вы хотите:

SELECT country, partner, segment_id, 
     COUNT(DISTINCT pv_id) pvs, 
     SUM(COUNT(DISTINCT pv_id)) OVER (PARTITION BY country) as country_total_pvs 
FROM (...) q 
GROUP BY country, partner, segment_id; 

Вместо:

SELECT country, partner, segment_id, 
     COUNT(DISTINCT pv_id) pvs, 
     country_total_pvs 
FROM (SELECT q.*, 
      COUNT(DISTINCT pv_id) OVER (PARTITION BY country) as country_total_pvs 
     FROM (...) q 
    ) q 
GROUP BY country, partner, segment_id, country_total_pvs; 
0

Попробуйте ниже

SELECT 
    a.country AS country, 
    partner, 
    segment_id, 
    COUNT(DISTINCT pv_id) pvs, 
    country_total_pvs 
FROM youTable AS a 
LEFT JOIN (
    SELECT country, COUNT(DISTINCT pv_id) country_total_pvs 
    FROM youTable GROUP BY country 
) AS b 
ON a.country = b.country 
GROUP BY 
    country, 
    partner, 
    segment_id, 
    country_total_pvs 

Имейте в виду - выше предоставит «правильные» различные значения для BigQuery StandardSQL, но в BigQuery Legacy SQL COUNT(DISTINCT) является статистическим приближением и не гарантируется, что это точно. Вы можете использовать EXACT_COUNT_DISTINCT вместо

Ниже немного оптимизированной версию

SELECT 
    a.country AS country, 
    partner, 
    segment_id, 
    pvs, 
    country_total_pvs 
FROM (
    SELECT 
    country, 
    partner, 
    segment_id, 
    COUNT(DISTINCT pv_id) pvs 
    FROM youTable 
    GROUP BY country, partner, segment_id 
) AS a 
LEFT JOIN (
    SELECT country, 
    COUNT(DISTINCT pv_id) country_total_pvs 
    FROM youTable GROUP BY country 
) AS b 
ON a.country = b.country