Нахождение лучших результатов по нескольким столбцам - PullRequest
1 голос
/ 10 сентября 2011

Если моя выборка DATA равна

team name  score1  score2
Adele's     15      18
Madonna   16       3
Britanny    9        12

Как получить список из 5 лучших результатов, используя оба столбца - мой вывод должен быть

Adele's   18
Madonna   16
Adele's   15
Britanny  12

Ответы [ 3 ]

2 голосов
/ 10 сентября 2011

Ответ Дерека Кромма нуждается в небольшой модификации, чтобы избежать ошибки, когда команда имеет две одинаковые оценки в топ-5 (например, так же, как в примере, за исключением того, что оценки Мадонны 1 и 2 равны 16). Поведение объединения по умолчанию заключается в удалении дублирующихся строк, поэтому будет сохранена только одна из оценок. Исходя из вопроса, я не думаю, что это желаемое поведение. Добавление ключевого слова all в объединение предотвратит эту ошибку.

select * from (
  select team, score1 from tbl
  union all select team, score2 from tbl) a
order by score1 desc
limit 5;

Я бы опубликовал это как комментарий к ответу Дерека Кромма, за исключением того, что у меня недостаточно репутации, чтобы сделать это. Извините, если опубликовать это как ответ не правильный этикет.

1 голос
/ 10 сентября 2011

Вы можете использовать UNION, чтобы получить список всех команд и результатов.Затем используйте ORDER и LIMIT, чтобы получить 5 лучших.

select * from (
  select team, score1 from tbl
  union select team, score2 from tbl) a
order by score1 desc
limit 5;
1 голос
/ 10 сентября 2011
SELECT "team name" AS team_name, GREATEST(score1, score2) AS max_score FROM users ORDER BY max_score DESC LIMIT 5

Чисто в качестве примечания, если вы можете, стоит переименовать столбец «имя команды» в team_name в вашей базе данных, так как это значительно упрощает запросы и работу с данными:)

...