sql - 如何摆脱多个branch_id?
问题描述
我有一个这样的 SQL 查询:
SELECT
COUNT(PERMISSION_ID) AS USER_TOTAL_PERMISSION_PER_BRANCH,
USER_ID,
BRANCH_ID
FROM BRANCH_PERMISSION_USER
GROUP BY USER_ID, BRANCH_ID
ORDER BY USER_ID, USER_TOTAL_PERMISSION_PER_BRANCH DESC
但我有一个问题,因为我只想要每个 user_id 的第一行。主要目标是将用户列表放在一起,它的分支和前 1 或 USER_TOTAL_PERMISSION_PER_BRANCH 上的不同
这是示例输出:
预期输出应该是:
[USER_TOTAL_PERMISSION_PER_BRANCH][USER_ID][BRANCH_ID]
135 1 1
135 2 1
134 3 1
1 4 1
1 5 1
1 6 1
解决方案
您可以使用窗口函数:
SELECT USER_TOTAL_PERMISSION_PER_BRANCH, USER_ID, BRANCH_ID
FROM (SELECT COUNT(*) AS USER_TOTAL_PERMISSION_PER_BRANCH,
USER_ID, BRANCH_ID,
ROW_NUMBER() OVER (PARTITION BY USER_ID ORDER BY COUNT(*) DESC) as seqnum
FROM BRANCH_PERMISSION_USER
GROUP BY USER_ID, BRANCH_ID
) ub
WHERE seqnum = 1
推荐阅读
- java - 如何使用循环添加 JavaFX 元素?
- python - 我正在尝试通过让您从一些东西中进行选择并将它们更改为几个选项之一来创建一个编辑文本的程序
- python-3.x - 如何在不使用 @hydra.main() 的情况下获取 Hydra 配置
- python - 熊猫按两列分组并获得唯一计数
- sql - 是否可以在存储过程中更改数据库连接-Oracle SQL
- vue.js - vue nuxt在带有props变量的方法函数中加载css文件
- javascript - 有没有更好的方法来实现这个滚动库,以便在快速单击箭头多次时不会中断
- bash - 将 csv 文件的标题复制到另一个 csv 文件中
- firebase - 如何使 Firestore 查询与 get() 和 valueChanges() 一起使用?
- date - 更改飞镖上的日期格式