首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按HQL和HQL选择distinct和group

按HQL和HQL选择distinct和group
EN

Stack Overflow用户
提问于 2016-01-03 10:11:50
回答 1查看 1.5K关注 0票数 3

在我的java项目中,我需要执行HQL查询。

以下是我的HQL查询:

代码语言:javascript
复制
select count(distinct n.id)" +
            "  FROM Neighborhood n, NeighborhoodMeta meta, NeighborhoodAffordability aff, AirbnbProperty as ap" +
            "  WHERE n.id = meta.id AND n.id = aff.id AND n.id = ap.neighborhood AND aff.singleHomeValue!=null" +
            " AND (latitude >=:minLat AND latitude <=:maxLat)" +
            " AND (longitude >=:minLong " + (meridian180WithinDistance ? "OR" : "AND") + " longitude <=:maxLong) AND " +
            "acos(sin(:locationLatitude) * sin(radians(latitude)) + cos(:locationLatitude) * cos(radians(latitude)) * cos(radians(longitude) -:locationLongitude)) <=:R " +
            "GROUP BY ap.neighborhood having count(ap.id) > 19  

这个计数总是产生一个"1“结果,但是,如果我删除了最后一行查询,它会返回一个正确的结果,但是我需要将我的结果限制在上述条件下。

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-03 14:11:58

您只获得1,因为您选择用于分组的不同值的计数(n.id = ap.neighborhood,因此n.idap.neighborhood相同)。

我假设查询的目标是计数不同的Neighborhood,它们与超过19个AirbnbPropertys相关联(当然,在应用了所有其他条件之后)。如果是这样的话,您需要的基本上是:

代码语言:javascript
复制
select count(*) from
 (select n.id
   from
   ... the rest of your query without group by ...
   group by n.id having count(ap.id) > 19
 )

但是,Hibernate不支持from子句中的子查询,因此您必须使用in操作符来解决这个问题:

代码语言:javascript
复制
select count(*) from Neighborhood n
 where n.id in 
  (select n.id
    from
    ... the rest of your query without group by ...
    group by n.id having count(ap.id) > 19
  )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34575362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档