gpt4 book ai didi

sql - 如何将 SQL 结果集限制为不太常见的项目

转载 作者:行者123 更新时间:2023-12-04 14:33:58 25 4
gpt4 key购买 nike

问题:我有一个姓名和地址列表。一些姓名(人)与其他人有相同的地址(街道、邮政编码、城镇)。我想选择所有地址不超过 3 次的名称,其余名称中的前三个名称中的每一个都指向同一地址。示例:

Albert | Adr1Berta  | Adr1Cesar  | Adr1Donald | Adr1Eric   | Adr2Fritz  | Adr2Gerd   | Adr2Henry  | Adr3

结果集应该是

Albert | Adr1 Berta  | Adr1Cesar  | Adr1Eric   | Adr2Fritz  | Adr2Gerd   | Adr2Henry  | Adr3

Donald 失踪了,因为他是具有相同地址的组中的第四个。使用 UNION 和子查询可以实现这个结果吗?有点像

select * from addresses where address in (select address from addresses group by address having count(address) <= 3)UNIONselect * from addresses where address in (select address from addresses group by address having count(address) > 3 limit 3)

我知道这个查询是错误的,因为它限制了出现次数超过 3 次的地址的完整结果集。我想知道这是否可以在带有 UNION 和子查询的单个 SELECT 中完成。我现在将在程序上使用 PHP/MySQL 来完成它,但只是为了好玩,我会对仅 SQL 的解决方案感兴趣。

我看过SQL query with limit on rows from one table, not the result set ,但这并不能反射(reflect)我的情况 - 或者是吗?

最佳答案

select name, address
from
( select *, row_number() over (partition by address order by name) as namenum
from yourTable
) t
where namenum <= 3;

关于sql - 如何将 SQL 结果集限制为不太常见的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2153410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com