Tener en cuenta que han de tabla de T, con los campos a y B.

Con regular SQL, yo podría hacer esto:

SELECT SUM(A * (100.0 - B) / 100.0) AS D FROM T;

Y me gustaría conseguir exactamente lo que yo esperaba.

Sin embargo, no estoy seguro de cómo hacerlo con CriteriaQuery.

Sé cómo hacer la suma de más de 1 campo, pero no se cómo hacer la suma de algunos de matemáticas de expresión a través de varios campos en una fila.

InformationsquelleAutor ioreskovic | 2014-02-07

1 Comentario

  1. 16

    La CriteriaBuilder interfaz proporciona las siguientes funciones aritméticas:

    • además: sum(a, b)
    • sustracción: diff(a, b)
    • multiplicación: prod(a, b)
    • división: quot(a, b)

    donde a b parámetros puede ser una expresión y/o literal.

    Como para la consulta, aquí es un ejemplo escrito en una forma legible:

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Number> q = cb.createQuery(Number.class);
    Root<T> t = q.from(T.class);
    
    //build SUM(A * (100.0 - B) /100.0) expression
    Expression<Double> diff = cb.diff(100.0, t.<Double>get("B"));
    Expression<Double> prod = cb.prod(t.<Double>get("A"), diff);
    Expression<Number> quot = cb.quot(prod, 100.0);
    Expression<Number> sum = cb.sum(quot);
    q.select(sum.alias("D"));
    
    System.out.println(em.createQuery(q).getSingleResult());

    Usted también puede construir la consulta como un one-liner:

    q.select(cb.sum(cb.quot(cb.prod(t.<Double>get("A"), cb.diff(100.0, t.<Double>get("B"))), 100.0)).alias("D"));

    Espero que te aclare tus dudas.

    • Funciona como un encanto, thx mucho 🙂
    • me estoy poniendo de error como «ERROR: ERROR: la columna «cmshcpcsco8_.nonfacility_pe_rvu» debe aparecer en la cláusula GROUP BY o ser utilizado en una función de agregado». alguna idea ??
    • quot método devuelve el cociente. Cómo obtener la división de dos expresiones?

Dejar respuesta

Please enter your comment!
Please enter your name here