Получение общего балла из лучших 2 баллов за участника

0

У меня проблема, когда код ниже показывает общий балл всех введенных забитых для членов, а не ограничивает их лучшим 2. Кажется, что не нравится дублировать баллы и не добавляет их в некоторых членов, имеет менее 2 баллов, показывающих, когда у них более 2 баллов.

create table members(id int, name char, handicap int);

insert into members(id, name, handicap)
values(1, 'Bob', 12);

insert into members(id, name, handicap)
values(2, 'John', 14);

create table results(member_id int, course_id int, score int, position int);

insert into results(member_id int, course_id int, score int, position int)
values(1,1,36,1);

insert into results(member_id int, course_id int, score int, position int)
values(1,2,34,2);

insert into results(member_id int, course_id int, score int, position int)
values(2,1,27,2);

insert into results(member_id int, course_id int, score int, position int)
values(2,2,35,2);

insert into results(member_id int, course_id int, score int, position int)
values(2,3,35,2);

insert into results(member_id int, course_id int, score int, position int)
values(1,3,38,1);

И данные GET

SELECT name, handicap, best, total FROM
(SELECT name, id, curr_handicap as handicap,  GROUP_CONCAT(score order by score DESC SEPARATOR ' | ') as best,
sum(score) as total
 FROM members m join (SELECT member_id, score, course_id
  FROM results m
  WHERE(
    SELECT COUNT(*)
    FROM results mT
    WHERE mT.member_id = m.member_id and mT.score >= m.score) <= 2 )  r
    on m.id = r.member_id 
    group by member_id
    ORDER BY total, member_id DESC, name, MIN(course_id) ASC
) AS T1
group by name
order by total DESC

Я хочу, чтобы желаемый результат выглядел так:

    <table>
    <tr><td>Name</td><td>Handicap</td><td>Total score</td><td>Best 2 scores</td> 
   </tr>
    <tr><td>Bob</td><td>12</td><td>74</td><td>38 | 36</td></tr>
    <tr><td>John</td><td>14</td><td>70</td><td>35 | 35</td></tr>
    </table>

Однако я получаю только общий балл от всех очков игроков, а лучшие 2 балла не всегда показывают, совпадают ли они.

  • 5
    Образцы данных и желаемые результаты действительно помогут.
  • 0
    Извините, я добавил несколько тестовых данных и желаемый результат, любая помощь будет отличной!
Теги:

1 ответ

0
Лучший ответ

Если кто-то заинтересован или застрял в чем-то подобном. Мне нужно было отобразить лучшие 6 баллов для каждого участника в этой таблице. Я хотел, чтобы общий балл от лучших 6 баллов, а не только общий общий балл для этого участника.

Решение ниже, используя переменные, было намного проще, чем я думал!

SELECT name, handicap, best, total FROM
 (SELECT name, id, curr_handicap as handicap,  GROUP_CONCAT(score order by score DESC 
 SEPARATOR ' | ') as best,
 sum(score) as total
 FROM members m join (select member_id, score, course_id, result_id
 from
   (
     SELECT member_id, score, course_id, result_id,
     (@row:=if(@prev=member_id, @row +1, if(@prev:= member_id, 1, 1))) rn
     FROM results t
     CROSS JOIN (select @row:=0, @prev:=null) c
     order by member_id, score desc 
   ) src
 where rn <= 6
 order by member_id, score)  r
 on m.id = r.member_id 
 group by member_id
 ORDER BY total, member_id DESC
 ) AS T1
group by name
order by total DESC");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню