作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:我有一个姓名和地址列表。一些姓名(人)与其他人有相同的地址(街道、邮政编码、城镇)。我想选择所有地址不超过 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/
我是一名优秀的程序员,十分优秀!