sql - COUNT(*) 作为“A 列”,GROUP BY“A 列”,B 列的第二个顶部
问题描述
您将如何获取显示不同端点(A 列)计数的查询,以及对应于该端点的顶级消费者(B 列)?
以下是一些示例数据:
+----------+------+
| endpoint | user |
+----------+------+
| /api/a | usrA |
| /api/a | usrA |
| /api/a | usrB |
| /api/b | usrA |
| /api/b | usrB |
| /api/b | usrB |
+----------+------+
以及我希望查询结果的样子:
+----------+-------+----------+
| Endpoint | Count | Top User |
+----------+-------+----------+
| /api/a | 3 | usrA |
| /api/b | 3 | usrB |
+----------+-------+----------+
这是我到目前为止的查询,但显然是错误的(该MAX
函数没有按照我的想法执行):
SELECT
endpoint as "Endpoint",
count(*) AS "Count",
max("user") AS "Top User"
FROM table_a
GROUP BY "Endpoint"
ORDER BY "Count"
我认为我的部分问题是我根本不知道提出这个问题的正确术语,如果我知道了,我也许可以用谷歌搜索我的胜利之路。
解决方案
DISTINCT ON
您可以在外部查询中使用特定于 PostgreSQL 的子句来过滤掉除顶级用户之外的所有用户:
SELECT DISTINCT ON (endpoint)
endpoint, "user", c
FROM (SELECT
endpoint,
count(*) AS c,
"user"
FROM table_a
GROUP BY endpoint, "user") AS sub
ORDER BY endpoint, c DESC;
推荐阅读
- node.js - 节点分析器:请提供有效的隔离文件作为最终参数
- javascript - 如何在反应中解决@media屏幕CSS中的问题
- sql-server - Azure SQL 数据库角色和访问权限
- python - 我想要两个列表框来显示相互对应的项目
- python-3.x - Python3 - RecursionError: 编译期间超出最大递归深度
- android - FragmentContainerView 中未调用/显示 OnMapReady
- firebase - Firebase 是否有通知监控功能?
- assembly - 整数显示程序不起作用 - MASM32
- javascript - 字体真棒注释掉解析后的标签
- c# - Problem with Unity 2019.429f1, why scene does not appear?