Я запускаю несколько запросов в Big Query Проблема с правильным и структурированным выводом - PullRequest
0 голосов
/ 19 февраля 2019

Я запускаю запрос и получаю вывод в ответном номере.Если я выполню запрос по частям, он вернет 3 строки, что правильно

WITH query AS 
(
   SELECT
       opt.answerNo AS ans,
       task.taskRaised.raisedAt.milliSeconds AS time
   FROM
       Test_2019_02_07
   CROSS JOIN
       UNNEST(task.workflowInfo.answers) AS answer
   CROSS JOIN
       UNNEST(answer.options) AS opt
),
raw AS
(
    SELECT
        COUNTIF(query.ans  = 1 AND query.time BETWEEN 1550341800000 AND 1550341899999) AS ans1
    FROM
        query

    UNION ALL 

    SELECT
        COUNTIF(query.ans = 2 AND query.time BETWEEN 1550341800000 AND 1550341899999) AS ans1 
    FROM
        query

    UNION ALL 

    SELECT
        COUNTIF(query.ans = 3 AND query.time BETWEEN 1550341800000 AND 1550341899999) AS ans1
    FROM
        query 
),
raw1 AS
(
    SELECT
        COUNTIF(query.ans = 1 AND query.time BETWEEN 1548959400000 AND 1550341899999) AS ans2
    FROM
        query 

    UNION ALL 

    SELECT
        COUNTIF(query.ans = 2 AND query.time BETWEEN 1548959400000 AND 1550341899999) AS ans2
    FROM
        query 

    UNION ALL 

    SELECT
        COUNTIF(query.ans = 3 AND query.time BETWEEN 1548959400000 AND 1550341899999) AS ans2
    FROM
        query 
),
raw3 AS
(
    SELECT
        COUNTIF(query.ans = 1 AND query.time BETWEEN 1548959400000 AND 1550514699999) AS ans3
    FROM
        query 

    UNION ALL 

    SELECT
        COUNTIF(query.ans = 2 AND query.time BETWEEN 1548959400000 AND 1550514699999) AS ans3
    FROM
        query

    UNION ALL 

    SELECT
        COUNTIF(query.ans  = 3 AND  query.time BETWEEN 1548959400000 AND 1550514699999) AS ans3
    FROM
        query 
)
SELECT * 
FROM raw, raw1, raw3

Когда я запусту

SELECT * FROM raw

, он вернет

0
0
0

Во время работы

SELECT * FROM raw1

возвращает

1
1
3

и работает

SELECT * FROM raw3

возвращает

3
1
1

Но когда я запускаю

SELECT * 
FROM raw, raw1, raw3

он вернет 27 строк с повторяющимися числами

Я ожидаю

ans1   ans2   ans3
-------------------
  0      1     3
  0      1     1 
  0      3     1

Таким образом, я не понял, почему он возвращает мне 27 строк.

Когда язапустите этот

SELECT * 
FROM raw, raw1, raw3

мой вывод

1 Ответ

0 голосов
/ 19 февраля 2019

По умолчанию, если мы добавим больше таблиц в запрос на выборку, будет выполнено перекрестное объединение .

В вашем случае, чтобы получить ожидаемый результат, нам нужно использовать объединения.Поскольку у нас нет общего столбца, мы можем добавить ROW_NUMBER() ко всем запросам выбора и присоединиться к этому столбцу.

Пример:

with
query1 as (select (ROW_NUMBER() OVER ()) as rn1, id as id1 from table1),
query2 as (select (ROW_NUMBER() OVER ()) as rn2, id as id2 from table2)

select * from query1 join query2 on query1.rn1=query2.rn2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...