使用在另一个查询中返回多个的查询

i1icjdpr  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(512)

我想对数据库中的一个表执行多个查询。下表汇总如下:

+-------+-----+
| user  | val |   
+-------+-----+
| user1 |  1  |   
| user2 |  2  |    
| null  |  5  |  
| null  |  5  |   
| user3 |  5  |
| user1 |  1  |  
+-------+-----+

单独的查询很简单,但是我很难把它们放在一起。查询内容如下:
我首先要查询user列中任何不同的非空用户值,这些值将返回多个。
根据上面的查询结果,我想计算每个具有特定val的用户的总数。
到目前为止,我有:

SELECT 
( SELECT user from db where user='{someuser}'),
( SELECT COUNT(*) FROM db WHERE user='{someuser}' AND val= '1'), 
( SELECT COUNT(*) FROM db WHERE user='{someuser}' AND val= '2');

本质上我需要的是用user列中的每个用户替换{someuser}。
我希望我的输出像这样

+-------+-------+-------+-------+
| user  | val=1 | val=2 | total |
+-------+-------+-------+-------+
| user1 |     1 |     1 |     2 |
| user2 |     1 |     0 |     1 |
| user3 |     0 |     0 |     0 |
+-------+-------+-------+-------+
mlnl4t2r

mlnl4t2r1#

嗯。我认为您需要条件聚合:

select user, sum(case when val = 1 then 1 else 0 end) as val_1,
       sum(case when val = 2 then 1 else 0 end) as val_2,
       count(*) as total
from t
group by user
order by user;

相关问题