Sql 使用不同的条件从同一表中计算相同的列
我正在GBQ上使用SQL 以下是我的表格的简化版本:Sql 使用不同的条件从同一表中计算相同的列,sql,google-bigquery,Sql,Google Bigquery,我正在GBQ上使用SQL 以下是我的表格的简化版本: Number | Amount | Name 4 10 A 1 0 B 6 100 A 8 0 C 5 0 A 4 10 C “编号”、“金额”或“名称”字段都没有唯一的值。 它们都可以重复很多次 我想计算每个“名称”的发生次数,其中金额=0除以该名称的总发生次数。 如下
Number | Amount | Name
4 10 A
1 0 B
6 100 A
8 0 C
5 0 A
4 10 C
“编号”、“金额”或“名称”字段都没有唯一的值。
它们都可以重复很多次
我想计算每个“名称”的发生次数,其中金额=0除以该名称的总发生次数。
如下所示:计数(金额=0)/计数(总数)
例如:
- 对于A:1/3=0.33
- 对于B:1/1=1
- 对于C:1/2=0.5
SELECT COUNT(*) Total, Name
FROM MyTable
GROUP BY Name
SELECT A.TotalZero/A.Total
FROM
(SELECT COUNT(*) Total, Name
FROM MyTable) A ,
(SELECT COUNT(*) TotalZero, Name
FROM MyTable
WHERE Amount>0) B
GROUP BY A.Name
要计算每个“名称”的金额=0:
如何在一个查询的结果中同时获得Total和TotalZero列,以便能够对它们进行分割
我尝试了以下查询:
SELECT COUNT(*) Total, Name
FROM MyTable
GROUP BY Name
SELECT A.TotalZero/A.Total
FROM
(SELECT COUNT(*) Total, Name
FROM MyTable) A ,
(SELECT COUNT(*) TotalZero, Name
FROM MyTable
WHERE Amount>0) B
GROUP BY A.Name
但是我需要一个列来连接这两个表,我不确定应该使用哪一个。
任何帮助都是有用的
注意:上面示例中的表实际上是子查询的结果。一种方法是
countif()
:
另一种方法是使用AVG()
进行条件聚合:
谢谢你的回复。它不起作用,因为COUNTIF(Amount=0)总是为所有“名称”返回0。我忘了提到该表是一个子查询。这就是原因吗?@HelpASisterOut。如果
countif()
返回0
,则不存在amount=0
的情况。无论您是从表还是子查询进行查询都无关紧要。是的,的确这是我的子查询中的一个问题-现在可以工作了,谢谢!
SELECT Name, AVG(CASE WHEN Amount = 0 THEN 1.0 ELSE 0 END)
FROM MyTable
GROUP BY Name;