postgresql 我需要一个函数,将总行数除以包含特定文本的行数

mec1mxoz  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(3)|浏览(171)

我不能写一个条件,让我计算行数,除以包含单词Tetris的行数,并显示除法的结果
试图

Select count(*) 
From table_name
Where main/(select main from table_name where main="Tetris")

字符串


的数据

mu0hgdu0

mu0hgdu01#

你可以将每一行的总和除以俄罗斯方块每一行的总和:

SELECT  SUM(1.0) / SUM(CASE WHEN main='Tetris' THEN 1 END)
FROM    table_name

字符串

tvokkenx

tvokkenx2#

从数据库中获取的数据只是放入SELECT子句中的数据。WHERE子句在这里专门根据 predicate 进行过滤。
您的查询只需移动SELECT子句中的麻烦部分即可工作。请注意,要获得ratio,您需要使用强制转换操作将COUNT(*)转换为浮点数。
最后,sql中的字符串值是单引号的。双引号用于标识符。

SELECT COUNT(*)::DECIMAL / (SELECT COUNT(*) FROM table_name WHERE main='Tetris')
FROM table_name

字符串
上面的一个稍微好一点的版本使用FILTER作为聚合函数:

SELECT COUNT(*)::DECIMAL / COUNT(*) FILTER (WHERE main='Tetris')
FROM table_name


或者这里有一个CASE的版本,它利用了NULL值不参与计数的事实。

SELECT COUNT(*)::DECIMAL / COUNT(CASE WHEN main='Tetris' THEN 1 ELSE NULL END)
FROM table_name

qq24tv8q

qq24tv8q3#

您尝试计算的是“tetris”出现率的倒数。除了Atmo提供的各种可能的解决方案之外,这里还有一种使用聚合函数AVG的替代方案。

SELECT 1.0 / AVG(CASE WHEN main = 'tetris' THEN 1.0 ELSE 0.0 END)
FROM table_name;

字符串

相关问题