我有一个电话号码与此类似的联系人表:
Name Phone
Alice 11
Alice 33
Bob 22
Bob 44
Charlie 12
Charlie 55
我不知道如何查询这样一个表,不仅通过简单的计数而且通过不同的名称来限制行。例如,如果我有一个神奇的 LIMIT_BY 子句,它会像这样工作:
SELECT * FROM "Contacts" ORDER BY "Phone" LIMIT_BY("Name") 1
Alice 11
Alice 33
-- ^ only the first contact
SELECT * FROM "Contacts" ORDER BY "Phone" LIMIT_BY("Name") 2
Alice 11
Charlie 12
Alice 33
Charlie 55
-- ^ now with Charlie because his phone 12 goes right after 11. Bob isn't here because he's third, beyond the limit
我怎样才能达到这个结果?
换句话说,选择包含按电话排序的前 N 个不同名称的所有行
最佳答案
我认为 PostgreSQL 没有提供任何特别有效的方法来执行此操作,但对于 6 行,它不需要非常有效。您可以执行子查询来计算您想要查看哪些人,然后将该子查询连接回完整表。
select * from
"Contacts" join
(select name from "Contacts" group by name order by min(phone) limit 2) as limited
using (name)
您可以将子查询放在 IN 列表中而不是 JOIN 中,但这通常性能更差。
关于sql - PostgreSQL 中不同值的 LIMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67248525/