当所有行都符合条件时过滤出SQL结果

时间:2019-03-19 20:22:47

标签: sql postgresql

鉴于某些非常复杂且昂贵的SQL查询结果具有两列-一些复杂的data和一个布尔值flag,在PostgreSQL中,有一种方法可以实现:

  • 如果结果正好有1行,并且flag列为true,则结果应为空。
  • 在任何其他情况下,无论flag值如何,结果都应完整返回。
-- This needs filtering:
SELECT data, flag FROM (...) src;

1 个答案:

答案 0 :(得分:1)

一个奇怪的要求,但是窗口函数可以做到:

SELECT data, flag
FROM (SELECT data, flag,
             count(*) OVER () AS c
      FROM (SELECT ...) AS src
     ) AS q
WHERE NOT flag OR c <> 1;