таблица результатов:
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) ПОСЛЕ всех гонщиков, у которых есть два результата?
Измените свой ORDER BY для сортировки по количеству записей DESC и THEN BY eventscore
ORDER BY count(*) DESC, eventscore ASC
select name from results
group by name
order count(*) desc, sum(position);