java - 按值分组并分离输出
问题描述
我有这种类型的数据:
| company_id | role_id |
| 1 | 1 |
| 2 | 2 |
| 1 | 2 |
这是我的查询,它选择一个公司 ID 并作为参数角色 ID 传递。
SELECT company_id AS companyId, COUNT(role_id) AS usersNumber
FROM companies
WHERE role_id = :userId
GROUP BY companyId
:userId
从 JPA 传递的参数在哪里。
这会产生这样的东西:
| company_id | passed_role_id_count |
| 1 | 1 |
| 2 | 1 |
我想要实现的是有这样的输出:
| company_id | first_role_count | second_role_count |
| 1 | 1 | 1 |
| 2 | 0 | 1 |
有可能有这样的输出吗?还是从 DB 中选择所有然后使用 Java Streams 分组更好?
解决方案
使用过滤聚合:
SELECT company_id AS companyId,
COUNT(*) filter (where role_id = 1) AS first_role_count,
COUNT(*) filter (where role_id = 2) AS second_role_count
FROM companies
WHERE role_id = :userId
GROUP BY companyId
推荐阅读
- python - 正则表达式查找最小长度的句子
- reporting-services - SSRS 设计不允许我编辑
- c# - 如何解决无效的招摇警告
- image - 使用文件大小和宽度计算图像高度
- python - “如果自我不是无”在方法中是什么意思?
- python - 验证 google.storage.Client 而不将服务帐户 JSON 保存到磁盘
- python - 如何在 for 循环中将当前索引值与下一个索引值进行比较?
- json - 如何将基本的 json 数组读入 bash 数组
- java - 在 API 29 中获取 isActiveNetworkMetered 和 isDefaultNetworkActive
- python - 求和函数递归实现的空间和时间复杂度