我想计算满足特定条件的事件数量。如果行数少于一百万,我想得到实际的数字。如果它超过一百万,我不需要知道确切的数字,可以将计数返回为100万。
我考虑过这个问题
select count(*) from (select id from events where x=10 limit 1000000) a
如何完成分离标准/子标准?
除了上面的sql之外,还有更好的方法吗?我使用的是postgresql 9.3
答案 0 :(得分:1)
该查询的效果不如常规计数,因此请尝试以下方法:
long count = ((Number)
session.createCriteria(Event.class)
.setProjection(Projections.rowCount())
.add(Restrictions.eq("x", 10))
.uniqueResult()).longValue();
long countLimit = Math.min(count, 1000000);
答案 1 :(得分:0)
据我了解 你必须计算一些重新编码,如果它是> 1000000它应该显示1百万+ 否则准确计数。 为此你可以尝试这个查询
String t;
t = (String) session.createQuery(
"select case when count(*)>1000000 "
+ "then '1Million +' "
+ "else count(*) "
+ "end "
+ "from events").uniqueResult();
session.getTransaction().commit();
System.out.println("size is " + t);
使用CASE [ WHEN {test_conditional} THEN {match_result} ]* ELSE {miss_result} END
https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch11.html#d5e3280