假设您实际上不需要保留标志(我从评论中得到的印象),我认为您可能正在寻找类似的东西:
SELECT test.*, CASE WHEN MAX(bd_line_count) OVER (PARTITION BY account) >= 4 THEN 'Y' ELSE 'N' END flag
FROM test
这使用
MAX
的分析版本在 bd_line_count
分组中找到最大的 account
,并基于此设置列 flag
。然后你可以包装它以获得所有'Y'行:
SELECT *
FROM
(
SELECT test.*, CASE WHEN MAX(bd_line_count) OVER (PARTITION BY account) >= 4 THEN 'Y' ELSE 'N' END flag
FROM test
) t
WHERE flag = 'Y'
但是,如果您要这样做,则实际上不需要有 Y/N 标志。你可以直接使用最大值:
SELECT *
FROM
(
SELECT test.*, MAX(bd_line_count) OVER (PARTITION BY account) mx
FROM test
) t
WHERE mx >= 4
你可以在这个小提琴中看到这个(以及其他一些变体)。
有点不清楚您是在生成行数还是实际存储了行数并且可能与计算行数不同。根据答案,你可能更喜欢这样的东西:
SELECT *
FROM test
WHERE account IN
(
SELECT account
FROM test
GROUP BY account
HAVING COUNT(*) >=4
)
内部查询
count
s 每 account
的行数并找到具有 4 或更多的 account
s。外部查询获取与这些帐户匹配的所有行。