Собственный SQL-запрос, возвращающий нулевое значение при вычислении среднего значения между датами - PullRequest
0 голосов
/ 07 июня 2019

Этот запрос прекрасно работает в программном обеспечении MySQL Workbench:

select avg(total) as moyenne from (select s.id_station, (s.s1_e1 + s.s1_e2 + s.s1_g0 + s.s1_g1 + s.s1_g2 + s.s1_g3+ s.s1_g4 + s.s1_g5 + s.s1_g6 + s.s1_g7
 + s.s1_g8 + s.s1_g9 + s.s3_g0 + s.s3_g1 + s.s3_g2 + s.s3_g4 + s.s3_g5 + s.s3_g7 + s.s3_g8 + s.s3_g9) as total from statistique s 
 where s.id_station=60351 and DATE(s.date) between '2019_06_01' and '2019_06_01')as moy;

Возвращает число.Поэтому я попытался реализовать его в репозитории JPA для моего приложения springboot:

    @Query(value="select avg(total) as moyenne from (select s.id_station, (s.s1_e1 + s.s1_e2 + s.s1_g0 + s.s1_g1 + s.s1_g2 + s.s1_g3+ s.s1_g4 + s.s1_g5 + s.s1_g6 + s.s1_g7" + 
            " + s.s1_g8 + s.s1_g9 + s.s3_g0 + s.s3_g1 + s.s3_g2 + s.s3_g4 + s.s3_g5 + s.s3_g7 + s.s3_g8 + s.s3_g9) as total from statistique s " + 
            " where s.id_station= :stationId and DATE(s.date) between :date1 and :date2)as moy;",
            nativeQuery= true)
    public Long avgErreurByStationId(Long stationId, @Param("date1") Date date1, @Param("date2") Date date2);

Но метод jpa, приведенный выше, возвращает NULL всякий раз, когда я передаю одну и ту же дату в запрос (например, 2019-06-01 два раза)

Так что он работает на mysql, но возвращает ноль в JPA Native Query.

Я также пробовал второй SQL-запрос с JPA nativeQuery, но на этот раз они оба работают как положено: SQL:

    @Query(value="select avg(total) as moyenne from (select st.id_station, sum(s.s1_e1 + s.s1_e2 + s.s1_g0 + s.s1_g1"
            + " + s.s1_g2 + s.s1_g3+ s.s1_g4 + s.s1_g5 + s.s1_g6 + s.s1_g7 + s.s1_g8 + s.s1_g9 + s.s3_g0 + s.s3_g1 "
            + "+ s.s3_g2 + s.s3_g4 + s.s3_g5 + s.s3_g7 + s.s3_g8 + s.s3_g9) as total "
            + "from station st, statistique s where "
            + "st.id_station=s.id_station and DATE(s.date) between :date1 and :date2 group by st.id_station)as moy;",
            nativeQuery= true)
    public Long avgErreurAllStations(@Param("date1") Date date1, @Param("date2") Date date2);

Для метода jpa, описанного выше, работают как SQL (инструментальные средства mysql), так и jpa.

Итак, проблема в первом запросе, который возвращает ноль, если я даю ему ту же датуили дата, которая не содержит никакой записи, НО в mysql она возвращает результат в той же ситуации (иначе: та же дата и даты без записей).Так почему же мое приложение Springboot возвращает нулевые значения?

...