sql - 如何订购正确的方法以在单个结果集中包含多个组?
问题描述
假设我有一个带有优先级列的联系人表。优先级值为 1-3。我想选择联系人 12 个联系人,它应该在这里列出所有优先级的联系人 - 4 个优先级为 1、4 的联系人 - 优先级为 2 和 4 - 优先级为 3。
FIRST_NAME | LAST_NAME | PRIORITY |
-----------|-----------|----------|
A | AB | 1 |
qwerty | AB | 1 |
Efr | AB | 1 |
University | AB | 1 |
United | AB | 2 |
Art | AB | 2 |
Falco | AB | 2 |
Some | AB | 2 |
123 | AB | 3 |
Greeb | AB | 3 |
Greea | AB | 3 |
Greem | AB | 3 |
如果我只按优先级排序,显然,它只会给我优先级为 1 的联系人,然后是其他联系人。
我以为我可以在这里使用PostgreSQL窗口功能,但不确定,是否可以做到。
SELECT * FROM
(SELECT
first_name, last_name, priority, created_at,
ROW_NUMBER() OVER (PARTITION BY priority ORDER BY created_at ASC) AS rank FROM contacts
) c
LIMIT 10
解决方案
你很亲密。LIMIT
您需要将结果集限制为仅行号小于或等于 4 的记录(对于每个优先级分区),而不是使用。
SELECT first_name, last_name, priority, created_at
FROM
(
SELECT c.*,
ROW_NUMBER() OVER (PARTITION BY priority ORDER BY created_at) AS rn
FROM contacts c
) t
WHERE rn <= 4;
推荐阅读
- powerquery - 如何使用 List.Generate 作为循环
- python - 转义序列在python中显示
- php - 如何有条件地覆盖 Eloquent 模型中的值?
- php - 通过 PHP 交付时未报告 MP3 持续时间
- reactjs - 酶测试与上下文 api 反应
- r - 在 r 中使用 cast、spread 或 melt 重塑数据表
- python-3.x - python 3.x timeit 问题
' - python - 给定gps点的速度,如何标准化节点ID的速度
- node.js - 我应该如何连接并将我的本地 mongoose db 移动到 mongodb 云图集?
- java - 如何使用artop sdk4.12在java中创建arxml文件