Sql 如何计算哪些元素的平均值
我和博士后一起工作 我有一个带有以下字段的表tbl:名称、单词 字段类型为字符串 我需要计算每个aaa的名字中不为空的单词的平均百分比 我试过这样的方法:Sql 如何计算哪些元素的平均值,sql,postgresql,Sql,Postgresql,我和博士后一起工作 我有一个带有以下字段的表tbl:名称、单词 字段类型为字符串 我需要计算每个aaa的名字中不为空的单词的平均百分比 我试过这样的方法: SELECT AVG(COUNT(words is not null) - count(*)) FROM tbl WHERE name="test" 但我得到了以下错误: aggregate function calls cannot be nested 我试图将查询更改为: SELECT (AVG((SELECT COUNT(*) FR
SELECT AVG(COUNT(words is not null) - count(*))
FROM tbl
WHERE name="test"
但我得到了以下错误:
aggregate function calls cannot be nested
我试图将查询更改为:
SELECT (AVG((SELECT COUNT(*) FROM tbl WHERE words IS NOT NULL) - (SELECT COUNT(*) FROM tbl))
FROM tbl
WHERE name="test"
但我似乎得到了错误的价值观
例如,对于下表:
name, words
----------------------------
test abc test, 1, 2, 3
t2 NULL
test NULL
t3 NULL
t2 a,b,c,d,e
test def zxy
t2 NULL
测试的结果需要是2/3,因为有2个测试结果不为空,并且表中有3个测试
如何以正确的方式编写查询?您不能嵌套它
因此,使用子查询:
SELECT
1.0*sum((case when a.words is null then 0 else 1 end))/
(SELECT count(*) FROM tbl b WHERE b.name= a.name group by b.name)
FROM tbl a
WHERE a.name= 'test'
group by name
输出:
Avg_
0.666666666666
你不能把它藏起来
因此,使用子查询:
SELECT
1.0*sum((case when a.words is null then 0 else 1 end))/
(SELECT count(*) FROM tbl b WHERE b.name= a.name group by b.name)
FROM tbl a
WHERE a.name= 'test'
group by name
输出:
Avg_
0.666666666666
我找到了解决办法:
SELECT CAST((CAST((SELECT COUNT(*)
FROM tbl
WHERE name="test" and words IS NOT NULL) as float)/(SELECT COUNT(*)FROM tbl WHERE name="test")) as float) as result
FROM tbl
WHERE name="test"
GROUP BY Country
我找到了解决办法:
SELECT CAST((CAST((SELECT COUNT(*)
FROM tbl
WHERE name="test" and words IS NOT NULL) as float)/(SELECT COUNT(*)FROM tbl WHERE name="test")) as float) as result
FROM tbl
WHERE name="test"
GROUP BY Country
发布样本数据和预期结果以澄清您的需求。发布样本数据和预期结果以澄清您的需求。我得到的是0,0,0的数组。。。在结果中,它不好,它需要是一个值。我添加了一个示例,说明我期望的结果是正确的,现在你得到2/3,结果是0.6666。让我知道我得到的是0,0,0的数组。。。在结果中,它不好,它需要是一个值。我添加了一个示例,说明我期望的结果是正确的,现在你得到2/3,结果是0.6666。让我知道