Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在子查询结果中查找特定值_Sql_Postgresql - Fatal编程技术网

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
函数做得很好,谢谢你指出。