问题:我有一个名称和地址列表。一些姓名(人)与其他人一样具有相同的地址(街道,邮政编码,城镇)。我想选择地址不超过三次的所有这些名称,其余的前三个名称分别指向同一个地址。 例子:如何将SQL结果集限制为不太常见的项目
Albert | Adr1 Berta | Adr1 Cesar | Adr1 Donald | Adr1 Eric | Adr2 Fritz | Adr2 Gerd | Adr2 Henry | Adr3
结果集应该是
Albert | Adr1 Berta | Adr1 Cesar | Adr1 Eric | Adr2 Fritz | Adr2 Gerd | Adr2 Henry | Adr3
唐纳德丢失,因为他是用同一个地址组的第4位。 这个结果可以通过UNION和子查询来实现吗?像
select * from addresses where address in (select address from addresses group by address having count(address) <= 3) UNION select * 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,但这并不反映我的情况 - 或者不是吗?
你怎么能认识到,唐纳德是该组的第四成员?这些数据如何分类? – Beatles1692 2010-01-28 09:33:46
这是MySql还是Sql Server? – 2010-01-28 09:53:36
排序顺序无关紧要。它必须是超过3个中的任何3个地址。 服务器是MySQL 5.1 – 2010-01-28 11:45:57