es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener los valores distintos en una columna, así como el recuento total usando la paginación de spring jpa.

Estoy tratando de seleccionar una lista de valores únicos de la columna C y su correspondiente conteo también. Mi código es el siguiente:

@Query(value = "SELECT DISTINCT t.C FROM table t WHERE t.param = :param order by t.C",
        countQuery = "SELECT count(DISTINCT t.C) FROM table t WHERE t.param = :param")
Page<string> findUniqueWithCountPagination(Pageable pageable,
        @Param("param") String param);

Estoy recibiendo el error “ORDER BY items must appear in the select list if SELECT DISTINCT is specified”. Cuando habilito la propiedad “show-sql”, noto que Spring está agregando automáticamente otra columna U al filtro “order by”. U es una columna de marca de tiempo en la tabla t.

¿Cómo puedo eliminar el campo innecesario U del “order by”? Si eso no es posible, ¿hay alguna otra forma de escribir la consulta para mi requisito?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar el campo innecesario U en el order by, se puede modificar la consulta como se indica a continuación:

    @Query(value = "SELECT t.C, count(t.C) FROM table t WHERE t.param = :param group by t.C order by t.C")
    Page<object[]> findUniqueWithCountPagination(Pageable pageable,
                @Param("param") String param);
    

    Esta consulta devolverá una página de matrices de objetos, donde el primer elemento de cada matriz será el valor único de la columna C y el segundo elemento será el recuento de ese valor.

    En esta consulta, hemos eliminado la palabra clave DISTINCT y hemos incluido una cláusula GROUP BY utilizando la columna C. Esto nos dará los valores únicos de la columna C y también nos permitirá utilizar la función de cuenta para obtener el recuento correspondiente.

    También hemos incluido tanto la columna C como la cuenta en la declaración SELECT, lo que eliminará la necesidad de una cláusula ORDER BY adicional.

    Finalmente, hemos cambiado el tipo de retorno a Page<object[]> para dar cabida a los valores devueltos por la consulta.

    ¡Espero que esto ayude!</object[]></object[]>

Comments are closed.