如何使用子查询或其他方法向此 bigquery/sql 查询添加新列

问题描述 投票:0回答:1

我创建了这个查询:

SELECT
  country,
  place,
  label_date,
  SUM(CASE
      WHEN Category = 'cat1' THEN Value
    ELSE
    0
  END
    ) AS t_s,
  SUM(CASE
      WHEN Category = 'cat2' THEN Value
    ELSE
    0
  END
    ) AS non_ps,
  SUM(CASE
      WHEN Category = 'cat3' THEN Value
    ELSE
    0
  END
    ) AS f_h,
  SUM(CASE
      WHEN Category = 'cat4' THEN Value
    ELSE
    0
  END) AS f_s,
  SUM(CASE
      WHEN Category = 'cat5' THEN Value
    ELSE
    0
  END) AS o_hp,
  SUM(CASE
      WHEN Category = 'cat6' THEN Value
    ELSE
    0
  END) AS o_hps,
  SUM(CASE
      WHEN Category = 'cat7' THEN Value
    ELSE
    0
  END) AS a_s,
  SUM(CASE
      WHEN Category = 'cat8' THEN Value
    ELSE
    0
  END) AS u_s
FROM
  `my_database`
where country is not null group by country, place, label_date order by country desc

我使用聚合是因为我需要避免出现许多空值和零。 like this 而不是 like this

现在我还有另一个疑问:

 select country, place, label_date, if((sum(value)/count(Value))=0,1,sum(value)/count(Value)) as s_u from `my_database` where Category = 'cat9' group by country, place, label_date

我想添加它,但我不能。

我尝试过这样做:

FROM
  `my_database` as main
JOIN(select country, place, label_date, if((sum(value)/count(Value))=0,1,sum(value)/count(Value)) as s_u from `my_database` where Category = 'cat9' group by country, place, label_date) as s_u ON main.country = s_u.country
where country is not null group by country, place, label_date order by country desc

我使用了国家/地区,因为遗憾的是我没有唯一的 ID,但我收到错误国家/地区是多余的。

我也尝试过这个:

SUM(CASE
      WHEN Category = 'cat8' THEN Value
    ELSE
    0
  END) AS u_s,
SUM(CASE
      WHEN Category = 'cat9' THEN if((sum(value)/count(Value))=0,1,sum(value)/count(Value))
    ELSE
    0
  END) AS u_s
FROM
  `my_database`
where country is not null group by country, place, label_date order by country desc

但现在我得到了一个可以聚合聚合错误。

sql google-bigquery subquery
1个回答
0
投票

您应该能够将其作为另一列添加到您的第一个查询中:

CASE WHEN Category = 'cat9' AND sum(value) = 0 THEN 1
WHEN Category = 'cat9' AND sum(value) <> 0 THEN sum(value) / (SELECT 
COUNT(*) FROM `my_database` WHERE Category = 'cat9' AND country IS NOT NULL)
ELSE NULL END

这使用数学快捷方式

sum(value) = 0
而不是
if((sum(value)/count(Value))=0...
因为分数可以等于 0 的唯一时间是当分子等于 0 时。

© www.soinside.com 2019 - 2024. All rights reserved.