2016-05-10 2 views
1
SELECT 
MAX(IF(customDimensions.index=1, customDimensions.value, NULL)) WITHIN hits 
AS CustomerID, 
date as date 
SUM(totals.visits) Visits, 
EXACT_COUNT_DISTINCT(fullvisitorid) AS Users, 
FROM [xxxxxxx.ga_sessions_xxxxx] 
Group by CustomerID; 

У меня возникает следующая ошибка при выполнении вышеуказанного запроса «Ошибка: недопустимая комбинация функций агрегирования с областью действия и не областью действия». Может кто-нибудь, пожалуйста, скажите мне, как это исправить?Ошибка в области области охвата и неавторизованного запроса

Благодаря

ответ

4

Использование standard SQL (снимите флажок «Использовать прежние SQL» в поле «Show Options»), вы должны быть в состоянии построить такой запрос:

SELECT 
    (SELECT MAX(IF(index=1, value, NULL)) 
    FROM UNNEST(customDimensions)) AS CustomerID, 
    date as date, 
    SUM(totals.visits) AS Visits, 
    COUNT(DISTINCT fullvisitorid) AS Users 
FROM `xxxxxxx.ga_sessions_xxxxx` 
GROUP BY CustomerID, date; 

Ниже приведен пример запроса чтобы проиллюстрировать подход:

WITH SampleTable AS (
    SELECT ARRAY<STRUCT<index INT64, value STRING>> 
     [(5, "foo"), (1, "bar"), (1, "baz")] AS customDimensions, 
    "20160518" AS date, 
    STRUCT(10 AS visits) AS totals, 
    "visitorid" AS fullvisitorid 
    UNION ALL SELECT ARRAY<STRUCT<index INT64, value STRING>> 
     [(0, "foo"), (4, "bar"), (2, "baz")] AS customDimensions, 
    "20160519" AS date, 
    STRUCT(20 AS visits) AS totals, 
    "visitorid" AS fullvisitorid) 
SELECT 
    (SELECT MAX(IF(index=1, value, NULL)) 
    FROM UNNEST(customDimensions)) AS CustomerID, 
    date as date, 
    SUM(totals.visits) AS Visits, 
    COUNT(DISTINCT fullvisitorid) AS Users 
FROM SampleTable 
GROUP BY CustomerID, date; 
+------------+----------+--------+-------+ 
| CustomerID | date | Visits | Users | 
+------------+----------+--------+-------+ 
| baz  | 20160518 |  10 |  1 | 
| NULL  | 20160519 |  20 |  1 | 
+------------+----------+--------+-------+ 

Кроме того, я думаю, что вам нужен подзапрос, чтобы вычислить максимальный над customDimensions повтореном поля с использованием л egacy SQL:

SELECT 
    CustomerID, 
    date as date, 
    SUM(totals.visits) Visits, 
    EXACT_COUNT_DISTINCT(fullvisitorid) AS Users 
FROM (
    SELECT 
    *, 
    MAX(IF(customDimensions.index=1, customDimensions.value, NULL)) 
     WITHIN customDimensions AS CustomerID 
    FROM [xxxxxxx.ga_sessions_xxxxx]) 
GROUP BY CustomerID, date; 
+0

не может заставить это работать. – sam123

+0

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

+0

Я получаю это - Ошибка: Синтаксическая ошибка: Неожиданное ключевое слово FROM в [7: 1] – sam123