имя не распознается стандартным sql bigquery - PullRequest
0 голосов
/ 16 июня 2020

Я рассчитываю количество каждого «Имени» и сортирую его по идентификатору во вложенном запросе. Я просто поместил COUNT (имя) в SELECT. Однако код возвращает ошибку, поскольку он не распознает столбец «Имя», поскольку FROM находится во внутреннем операторе. Мой код:

SELECT
   User_ID, 
    COUNT(Name) AS Total,

 SUM(CASE WHEN Language = 'EN' THEN 1 ELSE 0 END) AS EN,

 FROM (
   SELECT 
    User_ID, 

      CASE 
        WHEN Language in ('EN', 'English') THEN 'EN' 
        WHEN Language in ('MY', 'Malay')  THEN 'MY' ELSE Language 
      END AS Language,

   FROM 'table'
   GROUP BY User_ID, Language
 )
 GROUP BY User_ID

Что мне исправить, чтобы удалить ошибку?

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Вам действительно не нужен столбец Name для подсчета вещей. Это должно быть правильно:

SELECT T.User_ID, COUNT(*) AS Total, SUM(CASE WHEN T.Language = 'EN' THEN 1 ELSE 0 END) AS EN
FROM (
   SELECT User_ID,
      CASE 
        WHEN Language in ('EN', 'English') THEN 'EN' 
        WHEN Language in ('MY', 'Malay')  THEN 'MY'
        ELSE Language 
      END AS Language
   FROM 'table'
   GROUP BY User_ID, Language
) AS T
GROUP BY T.User_ID

Я не могу сказать о BigQuery, но реляционные базы данных требуют псевдонимов подзапросов, поэтому я назвал ваш псевдоним T.

Там также было избыточная запятая после SUM(CASE WHEN Language = 'EN' THEN 1 ELSE 0 END) AS EN,

0 голосов
/ 16 июня 2020

Убедитесь, что вы добавили столбец «Имя» в свой подзапрос.

Очевидно, вам придется сгруппировать по «Имя», как только вы его добавите.

SELECT
 User_ID, 
 COUNT(Name) AS Total,
 SUM(CASE WHEN Language = 'EN' THEN 1 ELSE 0 END) AS EN,

 FROM (
  SELECT 
  User_ID, 
  Name,

   CASE 
     WHEN Language in ('EN', 'English') THEN 'EN' 
     WHEN Language in ('MY', 'Malay')  THEN 'MY' ELSE Language 
   END AS Language,

  FROM 'table'
  GROUP BY User_ID, Name, Language
 )
GROUP BY User_ID

Попробуйте это.

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