无法使用标准sql bigquery识别名称

1mrurvl1  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(318)

我正在计算每个“name”的数量,并在嵌套查询中按id进行排序。我所做的只是将计数(名称)放入select。但是,代码返回一个错误,即它无法将列“name”识别为内部语句中的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

我应该修复什么来删除错误?

zvokhttg

zvokhttg1#

你真的不需要 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,

tgabmvqs

tgabmvqs2#

您需要确保在子查询中添加“name”列。
很明显,一旦你加上名字,你也必须按名字分组。

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

试试这个。

相关问题