Sql 在子查询结果中查找特定值
我有一个事件跟踪表,它将事件链接到受这些事件影响的用户。对于特定的Sql 在子查询结果中查找特定值,sql,postgresql,Sql,Postgresql,我有一个事件跟踪表,它将事件链接到受这些事件影响的用户。对于特定的事件,id对应多个用户id。每个事件跟踪元素也有一个事件波编号 对于一个特定事件,我想提取受其影响的用户数量,最大事件波(1),还想知道某个特定的用户是否受事件影响(2) 另外,我可以(1)使用: 和(2)使用: 但是,在不使用两个子查询的情况下,是否可以得到这些结果(1和2)?示例数据: create table event_tracking (event_id int, user_id int, event_wave int)
事件,id
对应多个用户id
。每个事件跟踪元素也有一个事件波
编号
对于一个特定事件,我想提取受其影响的用户数量,最大事件波(1),还想知道某个特定的用户是否受事件影响(2)
另外,我可以(1)使用:
和(2)使用:
但是,在不使用两个子查询的情况下,是否可以得到这些结果(1和2)?示例数据:
create table event_tracking (event_id int, user_id int, event_wave int);
insert into event_tracking values
(123, 10, 3),
(123, 20, 2),
(123, 30, 1);
如果要获取事件的所有用户_id=123:
select count(*), max(event_wave), array_agg(user_id) users
from event_tracking
where event_id = 123;
count | max | users
-------+-----+------------
3 | 3 | {10,20,30}
(1 row)
如果您希望用户使用max event\u wave获取事件\u id=123:
select distinct on (event_id)
row_number() over (order by event_wave) as count,
event_wave as max,
user_id
from event_tracking
where event_id = 123
order by event_id, event_wave desc;
count | max | user_id
-------+-----+---------
3 | 3 | 10
(1 row)
如果您希望对给定用户id使用简单的是/否:
select count(*), max(event_wave), 456 = any(array_agg(user_id)) yesno
from event_tracking
where event_id = 123;
或
示例数据:
create table event_tracking (event_id int, user_id int, event_wave int);
insert into event_tracking values
(123, 10, 3),
(123, 20, 2),
(123, 30, 1);
如果要获取事件的所有用户_id=123:
select count(*), max(event_wave), array_agg(user_id) users
from event_tracking
where event_id = 123;
count | max | users
-------+-----+------------
3 | 3 | {10,20,30}
(1 row)
如果您希望用户使用max event\u wave获取事件\u id=123:
select distinct on (event_id)
row_number() over (order by event_wave) as count,
event_wave as max,
user_id
from event_tracking
where event_id = 123
order by event_id, event_wave desc;
count | max | user_id
-------+-----+---------
3 | 3 | 10
(1 row)
如果您希望对给定用户id使用简单的是/否:
select count(*), max(event_wave), 456 = any(array_agg(user_id)) yesno
from event_tracking
where event_id = 123;
或
试一试
试一试
array\u agg
函数做得很好,谢谢你指出。array\u agg
函数做得很好,谢谢你指出。