MySQL запрос, выдающий разные выходные данные при выполнении в командной строке и Java - PullRequest
0 голосов
/ 26 октября 2018

У меня есть запрос, который вычисляет ранги студентов в таблице stu_marks , а имена студентов находятся в таблице stu_details .В таблице stu_marks у меня есть столбцы rollNo, exam, percentage и rank, а в stu_details - rollNo, name и class.У меня есть много других столбцов, которые не требуются для этого запроса.

+--------+-------------------------+
| rollNo | name                    |
+--------+-------------------------+
| 361601 | ABHISHEK N D            |
| 361635 | SAI CHANDAN K           |
| 361642 | SAIPRASANNA GURUMOORTHY |
+--------+-------------------------+

Теперь я пытаюсь подсчитать количество учеников в каждом классе за раз для сдачи экзамена.Ранги будут пропущены, если более одного студента получат одинаковый процент.

Для этого запроса я использую

set @rnk=0;  set @rank=0;  set @curScore = 0;
update stu_marks sm join
  (SELECT A.*, (@rnk:=@rnk+1) rnk, 
          (@rank:=IF(@curscore=percentage,@rank,@rnk)) rank, 
          (@curscore:=percentage) newscore from 
          (select sm1.rollNo, name, percentage, exam from stu_marks 
             sm1 join stu_details sd1  where sd1.rollNo=sm1.rollNo and 
             class='X' and exam='HalfYearly' order by percentage desc) A
  ) AA set sm.rank = AA.rank where sm.rollNo=AA.rollNo and sm.exam=AA.exam;

Этот запрос работает нормально, и я получаю правильный вывод, т. Е.ранги обновляются должным образом.После выполнения запроса таблица stu_marks выглядит следующим образом.

+--------+------------------------+------+
| rollNo |    exam    |percentage | rank |
+--------+------------+-----------+------|
| 361642 | HalfYearly |   97.75   |    1 |
| 361601 | HalfYearly |   97.25   |    2 |
| 361635 | HalfYearly |   97.25   |    2 |

Но когда я запускаю ту же форму запроса Java, используя PreparedStatement, она не работает.

        ps.executeUpdate("SET @rnk=0");
        ps.executeUpdate("SET @rank=0");
        ps.executeUpdate("SET @curPer=0");

String calculateRank = "update stu_marks sm join"
                    + "(SELECT A.*, (@rnk:=@rnk+1) rnk, (@rank:=IF(@curscore=percentage,@rank,@rnk)) rank, "
                    + "(@curscore:=percentage) newscore from "
                    + "     (select sm1.rollNo, name, percentage, exam "
                    + "     from stu_marks sm1 join stu_details sd1  "
                    + "     where sd1.rollNo=sm1.rollNo and class=? and exam=? "
                    + "     order by percentage desc) A) AA "
                    + "set sm.rank = AA.rank where sm.rollNo=AA.rollNo and sm.exam=AA.exam;";

        ps = con.prepareStatement(calculateRank);
        ps.setString(1, chosenClass);
        ps.setString(2, chosenExam);
        System.out.println(ps);
        ps.executeUpdate();

В этом случае ранги не обновляются должным образом.Как видите, 97,25 получает 2-й ранг один раз и 3-й ранг один раз.

+--------+------------------------+------+
| rollNo |    exam    |percentage | rank |
+--------+------------+-----------+------|
| 361642 | HalfYearly |   97.75   |    1 |
| 361601 | HalfYearly |   97.25   |    2 |
| 361635 | HalfYearly |   97.25   |    3 |

В чем проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...