BigQuery SQL: имеют ли псевдонимы SELECT приоритет над именами столбцов предложения FROM при использовании в предложении GROUP BY? - PullRequest
1 голос
/ 31 января 2020

У меня есть простой запрос, который имеет неоднозначность относительно col:

SELECT SUBSTR(col, 1, 4) AS col, 
       COUNT(*) AS nc
  FROM (SELECT 'test1' AS col
         UNION ALL
        SELECT 'test2' AS col) 
 GROUP BY col

Согласно документации , средство проверки запросов должно выдавать ошибку:

Неоднозначность между именем столбца предложения FROM и псевдонимом списка SELECT в GROUP BY:

SELECT UPPER(LastName) AS LastName
FROM Singers
GROUP BY LastName;

Приведенный выше запрос неоднозначен и приведет к ошибке, поскольку LastName в предложении GROUP BY может ссылаться на исходный столбец LastName в Singers, или он может ссылаться на псевдоним AS LastName, значение которого равно UPPER (LastName).

Но запрос выполняется успешно и выдает следующий результат:

╔═══╦═══════╦══════╗
║   ║ col   ║ nc   ║
╠═══╬═══════╬══════╣
║ 1 ║ test  ║ 2    ║
╚═══╩═══════╩══════╝

Из результатов видно, что предложение GROUP BY распознает col как псевдоним внешнего выбора (целое выражение SUBSTR).

Итак, вот мой вопрос, достаточно ли надежное поведение? Могу ли я написать свои запросы с учетом этого и соответственно адаптировать свои запросы?

1 Ответ

1 голос
/ 01 февраля 2020

Этот запрос не совсем двусмысленный. Я хорошо понимаю намерения, и BigQuery тоже.

Сравните:

WITH Singers AS (SELECT "Sinatra" LastName UNION ALL SELECT "sinatra")

SELECT UPPER(LastName) AS LastName
FROM Singers
GROUP BY Singers.LastName;

с

WITH Singers AS (SELECT "Sinatra" LastName UNION ALL SELECT "sinatra")

SELECT UPPER(LastName) AS LastName
FROM Singers
GROUP BY LastName;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...