计算具有多列的不同 select 上的行数
Count rows on distinct select with multiple columns
我已经搜索了一段时间,但没有找到足够的答案来自己做这个。
我有一个 SQL 女士,看起来像这样:
select count(*) from
( select distinct supplierName, supplierNr
from dbo.InvoiceTypeBean
) as a
这个returns我想要的纯SQL
但我需要在休眠状态下使用标准 and/or detachedcriteria:
分离条件部分:
DetachedCriteria dCriteria = DetachedCriteria.forClass(clazz);
ProjectionList p = Projections.projectionList();
p.add(Projections.property("supplierName"));
p.add(Projections.property("supplierNr"));
dCriteria.setProjection(Projections.distinct(p));
问题是将其附加到条件:
Criteria criteria = session.createCriteria(clazz);
.... Some atachement
criteria.setProjection(Projections.rowCount());
int count = ((Number) criteria.uniqueResult()).intValue();
我真的需要使用 Criteria and/or DetachedCriteria 的解决方案,因为查询是动态构建的,并且使用它们构建更好的解决方案。
很好地找到了解决方案,我真正需要的只是在多列上使用 distinct 时输出的行数(我知道可以指定得更好)。
感兴趣的解决方案:
session.beginTransaction();
Criteria criteria = session.createCriteria(clazz);
ProjectionList p = Projections.projectionList();
p.add(Projections.property("supplierName"));
p.add(Projections.property("supplierNr"));
criteria.setProjection(Projections.distinct(p));
criteria.setResultTransformer(Transformers.TO_LIST);
ScrollableResults results = criteria.scroll();
results.last();
count = results.getRowNumber() + 1;
results.close();
session.getTransaction().commit();
有趣的部分是 scrollableresult 并且没有使用 DetachedCriteria。
我不确定,但我认为 ScrollableResults
的使用在大型记录集的情况下可能是一个严重的性能瓶颈。
我已经搜索了一段时间,但没有找到足够的答案来自己做这个。
我有一个 SQL 女士,看起来像这样:
select count(*) from
( select distinct supplierName, supplierNr
from dbo.InvoiceTypeBean
) as a
这个returns我想要的纯SQL
但我需要在休眠状态下使用标准 and/or detachedcriteria:
分离条件部分:
DetachedCriteria dCriteria = DetachedCriteria.forClass(clazz);
ProjectionList p = Projections.projectionList();
p.add(Projections.property("supplierName"));
p.add(Projections.property("supplierNr"));
dCriteria.setProjection(Projections.distinct(p));
问题是将其附加到条件:
Criteria criteria = session.createCriteria(clazz);
.... Some atachement
criteria.setProjection(Projections.rowCount());
int count = ((Number) criteria.uniqueResult()).intValue();
我真的需要使用 Criteria and/or DetachedCriteria 的解决方案,因为查询是动态构建的,并且使用它们构建更好的解决方案。
很好地找到了解决方案,我真正需要的只是在多列上使用 distinct 时输出的行数(我知道可以指定得更好)。
感兴趣的解决方案:
session.beginTransaction();
Criteria criteria = session.createCriteria(clazz);
ProjectionList p = Projections.projectionList();
p.add(Projections.property("supplierName"));
p.add(Projections.property("supplierNr"));
criteria.setProjection(Projections.distinct(p));
criteria.setResultTransformer(Transformers.TO_LIST);
ScrollableResults results = criteria.scroll();
results.last();
count = results.getRowNumber() + 1;
results.close();
session.getTransaction().commit();
有趣的部分是 scrollableresult 并且没有使用 DetachedCriteria。
我不确定,但我认为 ScrollableResults
的使用在大型记录集的情况下可能是一个严重的性能瓶颈。