postgresql - 使用 Postgresql 计算列中的唯一值和重复值
问题描述
目标:查找列中唯一和重复的计数worker_ref_id
。
我在 MySQL 中找到了解决方案,但在IF
PostgreSQL 中不存在。那么,我将如何在 PostgreSQL 中做到这一点?
我有下表:
|worker_ref_id|bonus_amount|
| 1| 5000|
| 2| 3000|
| 3| 4000|
| 1| 4500|
| 2| 3500|
我想要以下输出:
|Unique|Duplicates|
|1 |2 |
我得到了正确的答案,但它显示为两行而不是两列和一行:
SELECT COUNT(*) AS "Duplicate" FROM (SELECT worker_ref_id,
COUNT(worker_ref_id) AS "Count"
FROM bonus
GROUP BY worker_ref_id
HAVING COUNT(worker_ref_id) > 1) AS mySub
UNION
SELECT COUNT(*) AS "Unique" FROM (SELECT worker_ref_id,
COUNT(worker_ref_id) AS "Count"
FROM bonus
GROUP BY worker_ref_id
HAVING COUNT(worker_ref_id) = 1) AS mySub2
解决方案
我们可以使用 CTE 分两步执行此操作:
WITH cte AS (
SELECT worker_ref_id, COUNT(*) AS cnt
FROM bonus
GROUP BY worker_ref_id
)
SELECT
COUNT(*) FILTER (WHERE cnt = 1) AS "Unique",
COUNT(*) FILTER (WHERE cnt > 1) AS Duplicates
FROM cte;
推荐阅读
- arrays - RowMapper 的 Spring jdbc 模板的单元测试用例
- python - 使用 Nginx 和 WSGI 运行 Python 脚本 - 卡住
- reporting-services - 如何解决“网址预订添加失败,错误:87”?
- autodesk-forge - 尝试创建 Forge / Fusion Lifecycle Webhook 时出现奇怪错误
- python - tensorflow keras:在另一层中使用一个层的变量(序列化错误:TypeError:无法腌制_thread.RLock对象)
- azure - 在本地运行 Microsoft Azure 计算机视觉认知服务读取文本容器时出错 - 非法指令
- exception - groovy.lang.MissingMethodException:没有方法签名:java.lang.String.call() 适用于参数类型:() 值:[]
- java - 如何比较Java中的hashmap?
- reactjs - React.js:是否可以使用 axios 调用 SOAP Web 服务?
- asp.net - WIX 安装程序:从 Web 中删除文件会导致“系统找不到文件 '..'”