Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres组至少有一行状态=';已启动';_Sql_Postgresql_Group By_Having Clause - Fatal编程技术网

Sql Postgres组至少有一行状态=';已启动';

Sql Postgres组至少有一行状态=';已启动';,sql,postgresql,group-by,having-clause,Sql,Postgresql,Group By,Having Clause,我需要执行分组,并且仅当至少一个观察值与约束匹配时才包括。就像我试图在下面描述的那样 SELECT {some variables} FROM my_table GROUP BY A HAVING {at least 1 row with status='started'} 我最初猜测要替换的是“至少有一行的status='started'”是“bool_或(status='started')”。这不管用 你们有人有建议吗 编辑: 很好。它对我不起作用的原因是我使用了错误的引号。感谢您的帮助,

我需要执行分组,并且仅当至少一个观察值与约束匹配时才包括。就像我试图在下面描述的那样

SELECT {some variables}
FROM my_table
GROUP BY A
HAVING {at least 1 row with status='started'}
我最初猜测要替换的是“至少有一行的status='started'”是“bool_或(status='started')”。这不管用

你们有人有建议吗

编辑:

很好。它对我不起作用的原因是我使用了错误的引号。感谢您的帮助,并对给您带来的不便表示歉意。

在Postgres中使用bool_或(status='started'
)是一个不错的选择,可能是您最好的选择

它实际上相当于:

having max( (status = 'started')::int ) = 1
为了完整性:在标准SQL中,您可以使用
大小写
表达式来表达:

having max(case when status = 'started' then 1 end) = 1

或者在现代标准SQL中:
具有count(*)filter(其中status='started')>0
@a_horse_,with_no_name:这是ANSI标准的一部分吗?我这样问是因为我知道Postgres是唯一支持这种语法的数据库。是的,它是在SQL中添加的:2006@a_horse_with_no_name:好的,谢谢你的信息。很遗憾,这样的文件不能免费获得。。。而且,数据库产品在实现如此有价值的部分时并没有付出真正的努力,这也是一个遗憾!
having max(case when status = 'started' then 1 end) = 1