mis*_*mas 2 sql oracle group-by
我有包含这些记录的表 audit_log:
log_id | request_id | status_id
1 | 2 | 5
2 | 2 | 10
3 | 2 | 20
4 | 3 | 10
5 | 3 | 20
Run Code Online (Sandbox Code Playgroud)
我想知道是否存在同时具有 status_id 5 和 10 的 request_ids。所以这个查询应该返回 request_id = 2 因为它的列 status_id 有值 5 和 10(request_id 3 被省略,因为 status_id 列只有 10 没有 5 的值)。
我怎么能用 SQL 做到这一点?
我想我应该按 request_id 使用 group,但我不知道如何检查 group 是否具有值为 5 和 10 的 status_id?
谢谢,
米斯马
这可能是一种方式:
/* input data */
with yourTable(log_id , request_id , status_id) as (
select 1 , 2 , 5 from dual union all
select 2 , 2 , 10 from dual union all
select 3 , 2 , 20 from dual union all
select 4 , 3 , 10 from dual union all
select 5 , 3 , 20 from dual
)
/* query */
select request_id
from yourTable
group by request_id
having count( distinct case when status_id in (5,10) then status_id end) = 2
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
select request_id,
case when status_id in (5,10) then status_id end as checkColumn
from yourTable
Run Code Online (Sandbox Code Playgroud)
给
REQUEST_ID CHECKCOLUMN
---------- -----------
2 5
2 10
2
3 10
3
Run Code Online (Sandbox Code Playgroud)
所以条件count (distinct ...) = 2起作用