【发布时间】:2021-01-11 06:31:23
【问题描述】:
我有一张如下表:
id | ncode | code
=================
1 1 ABC
1 2 DEF
2 1 ABC
3 1 ABC
4 1 ABC
4 2 DEF
我有两个要求:
-
ncode== 1 和code==ABC的所有记录 - 但前提是
id没有在表中的某处重复(即,我不想要code==ABC的记录,如果相同的id在某处也有ncode> 1在表格中。
select * from table where code == "ABC" and ncode == 1 将满足第一个要求,但我不知道如何满足第二个要求。
给定上面的示例表,我想要的输出是:
id | ncode | code
=================
2 1 ABC
3 1 ABC
根据下面的答案,我使用了窗口函数:
select *
from (
select *,
sum(case when ncode > 1 then 1 else 0 end) over(partition by id) cnt
from mytable
)
where code = 'ABC' and ncode = 1 and cnt = 0 order by id
然后我实现了接受的答案提供的 Google BiqQuery 特定语法:
select id, ANY_VALUE(ncode) ncode, ANY_VALUE(code) code
from mytable
group by id
having count(1) = 1
and (cpt, ncode) = ('ABC', 1)
【问题讨论】:
-
请用您正在运行的数据库标记您的问题:postgresql、oracle、mysql...?
-
我已标记
google-bigquery
标签: sql count google-bigquery subquery window-functions