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

如何在多个列上计算不同

杜经艺
2023-03-14
问题内容

我如何使用JPA条件API执行以下操作:

select count(distinct column1, column2) from table

使用CriteriaBuilder.countDistinct在一个列/路径上执行此操作很简单,但是如何在两个路径/列上执行此操作?


问题答案:

这是一个较晚的答案:-)尽管我不确定情况是否有所改变。

最近,我遇到了非常相同的需求,并使用concat解决了该需求,即通过将列连接为 伪列 ,然后countDistinct将其连接到 伪列
上。

但是我不能使用,criteriaBuilder.concat因为它生成了||用于串联的JPQL
,而Hibernate遇到了麻烦。

幸运的是@Formula,因此,我将伪列映射到具有以下内容的字段@Formula

@Entity
public class MyEntity {
  @Column(name="col_a")
  private String colA;

  @Column(name="col_b")
  private String colB;

  @Formula("concat(col_a, col_b)") // <= THE TRICK
  private String concated;
}

这样,我终于可以将concated字段用于CriteriaBuilder.countDistinct

//...
Expression<?> exp = criteriaBuilder.countDistinct(entity.get("concated"));
criteriaQuery.select(exp);

TypedQuery<Long> query = entityManager.createQuery(criteriaQuery);
return query.getSingleResult();

我希望JPA将(或希望已经)支持countDistinct多列,这样就可以避免所有这些混乱情况。



 类似资料:
  • 问题内容: 我编写了一个脚本,该脚本在用户每次登录我们域中的计算机时运行。此脚本记录用户以及他们登录的计算机。任意数量的用户可以登录任意数量的计算机。 我只是从一个不在的顾问那里继承了这个IT环境,并且正在编写这个小查询,因此当接到用户的呼叫时,我可以按该用户的名字进行搜索,并合理地预测该用户正在使用的计算机。他们登录到任何给定计算机的次数。 这是“登录”表中数据的示例: 我要敲定的逻辑是跨多个列

  • 我正在尝试使用一个函数从pandas数据帧中的多个列计算多个列。该函数接受三个参数-a-、-b-和-c-,并返回三个计算值-sum-、-prod-和-quot-。在我的pandas数据框架中,我有三个列-a-、-b-和-c-我想从中计算列-sum-、-prod-和-quot-。 我所做的映射只有在正好有三行时才起作用。我不知道出了什么问题,尽管我认为这与选择正确的轴有关。有人能解释一下发生了什么,

  • 我想知道在PostgreSQL中是否有计算多列之和的方法。 我有一个超过80列的表,我必须编写一个查询,添加每个列的每个值。 我尝试使用SUM(col1、col2、col3等),但它不起作用。

  • 问题内容: 我在Sqlite中有一个查询,其中涉及复杂的列计算,可以这样说: 我想将此计算选择为,但我还需要将其用作另一种计算的组成部分: 不幸的是,这会产生错误: 我知道我可以简单地重复计算: 但是,假设操作复杂且昂贵,是否有什么方法可以在以后重新引用它而不必重新计算呢? 问题答案: 您需要使用子查询。 结果

  • 如何从对象列表中获得distinct(基于两个属性的distinct)列表。例如,让有一个带有属性名称和价格的对象列表。现在,我如何获得一个具有不同名称或价格的列表。 假设 然后在返回- n1,p1的price上运行filter 这不是预期的结果。

  • 例如,假设我有一个 我有条件: 我如何测试条件并为我的df的每一行返回一个结果,如下面所示? 编辑:理想情况下,我想创建一个,允许我 并计算所有行的数据。因为在实际数据中,有100个条件语句和10个列。