MySQL присваивает значение пустому псевдониму

0

таблица результатов:

result_event | name          |  position
-------------+---------------+------------
1            | Jason Smith   |  1
1            | David Johnson |  2
1            | Randy White   |  3
1            | Billy Hansen  |  4 
2            | Wally Mann    |  1
2            | Jason Smith   |  2
2            | Billy Hansen  |  3
2            | David Johnson |  4
2            | Randy White   |  5

У меня есть таблица с результатами гонки, как указано выше. Я хочу сортировать гонщиков по их совместному размещению в двух гонках. (например, 1-й плюс 2-й = 3, 2-й плюс 4-й = 6 и т.д.) Гонщик "Уолли Манн" не участвовал в первой гонке, поэтому, несмотря на то, что он выиграл вторую гонку, его следует забивать за всех остальных.

Желаемый результат:

Name          | Race1  | Race2
--------------+--------+-------
Jason Smith   |   1    |   2
David Johnson |   2    |   4
Billy Hansen  |   4    |   3 
Randy White   |   3    |   5
Wally Mann    |   NULL |   1

Текущий запрос:

SELECT name,
     CASE(WHEN result_event=1 then position else 0 END) Race1,
     CASE(WHEN result_event=2 then position else 0 END) Race2,
     SUM(position) eventscore
FROM results
GROUP BY name
ORDER BY eventscore DESC

В моем текущем запросе "Wally Mann" является первым в списке, потому что (Null + 1) <(1 + 2). Что я могу сделать для создания результата (Null + 1) ПОСЛЕ всех гонщиков, у которых есть два результата?

  • 0
    Вы можете попробовать группу по имени, добавить условие count (*) = 2, отсортировать их на основе совокупного значения и затем написать запрос объединения для count (*) = 1.
Теги:

2 ответа

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

Измените свой ORDER BY для сортировки по количеству записей DESC и THEN BY eventscore

ORDER BY count(*) DESC, eventscore ASC
0
select name from results
group by name
order count(*) desc, sum(position);

Ещё вопросы

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