当前位置: 首页 > 面试题库 >

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

吴哲
2023-03-14
问题内容

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

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

唐纳德(Donald)失踪是因为他是地址相同的小组的第四名。可以通过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解决方案感兴趣。


问题答案:

您可以尝试类似

SELECT  PersonName,
        Address
FROM    (
            SELECT  *,
                    (SELECT COUNT(1) FROM addresses WHERE Address = a.Address AND PersonName < a.PersonName) CountLess
            FROM    addresses a
        ) sub
WHERE   sub.CountLess <= 2


 类似资料:
  • 问题内容: 我想知道是否可以限制SQL请求的结果? 例如,最多只返回以下内容的50行: 谢谢。 问题答案: 是的,这是可能的。这在数据库引擎之间有所不同。 Postgres: SQL Server: …

  • 问题内容: 我有一些SQL几乎可以完成我想做的事情。我正在使用三个表,一个用户,一个UserPhoneNumbers和一个UserPhoneNumberTypes。我正在尝试获取要导出其电话号码的用户列表。 数据库本身很旧,并且存在一些完整性问题。我的问题是,数据库中每个电话号码只能有一种类型,但事实并非如此。运行此程序时,如果每个人包含(例如)两个“家庭”数字,我都会得到多行结果。 如何修改SQ

  • 一个单独的查询条件是 org.hibernate.criterion.Criterion 接口的一个实例。org.hibernate.criterion.Restrictions 类定义了获得某些内置 Criterion 类型的工厂方法。 List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "

  • 因此,我正在对最新的DynamoDBEnhancedAsyncClient使用分页。 然而,在上应用限制()时,它并没有限制单个页面上的项目。示例:如果我通过仍然在中显示2条记录。不确定是以项目数为参数还是以页数为参数。如果是它的页面,有没有办法限制每页的数量?我们知道DDB创建的页面最大大小为1MB。但我们的json记录以字节为单位,这意味着每页将获取的记录。这不是效率低下吗?是否可以限制每页的

  • 问题内容: 我想基于该表的数量从表中的一行获得多个结果。 因此,我希望查询的输出为A的12倍(无论是否使用计数器)和B的138倍。我已经看到了在DB上添加计数表的解决方案,但我无法做到这一点。 问题答案: 您可以使用相关的分层查询: 或递归子查询分解子句: 因此对于测试数据: 这两个解决方案都将输出:

  • 问题内容: 我正在使用以下内容将检索到的值添加到类中。所有值都将添加到该类的属性中,但是我正在使用compisition(在类中具有class的对象),并且在输出中不显示任何内容。 地址类别如下: 问题答案: 像这样的作品: 将ResultSet行转换为JavaBean。此实现使用反射和BeanInfo类将列名与bean属性名匹配。属性根据以下几个因素与列匹配: 该类具有与列同名的可写属性。名称比