我创建了这个查询:
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
现在我还有另一个疑问:
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
但现在我得到了一个可以聚合聚合错误。
您应该能够将其作为另一列添加到您的第一个查询中:
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 时。