SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.03.2010 15:25:03

ants
Участник
Зарегистрирован: 20.03.2010
Сообщений: 4

Выборка с сортировкой и удалением дублей

Здравствуйте,
имеется таблица результатов в играх - games
структура примерно такая:

game1 | nickname1 | date1 | result1
game1 | nickname2 | date2 | result2
game1 | nickname1 | date3 | result3
game1 | nickname3 | date3 | result4

где result1>result2>result3>result4

Требуется показать игроков, занявших первые три места в игре.
Проблема в том, что при запросе типа:
SELECT result,nickname FROM games ORDER BY result DESC LIMIT 3
первое и третье место "занимает" игрок nickname1, что неправильно

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

Подскажите как?

Неактивен

 

#2 20.03.2010 17:38:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка с сортировкой и удалением дублей

SELECT max(result) result, nickname FROM games GROUP BY nickname ORDER BY result DESC LIMIT 3

Неактивен

 

#3 20.03.2010 17:52:46

ants
Участник
Зарегистрирован: 20.03.2010
Сообщений: 4

Re: Выборка с сортировкой и удалением дублей

vasya написал:

SELECT max(result) result

ни я, ни mysql синтаксис в этом месте не поняли
можно пояснить?

Неактивен

 

#4 20.03.2010 18:04:56

ants
Участник
Зарегистрирован: 20.03.2010
Сообщений: 4

Re: Выборка с сортировкой и удалением дублей

и еще, GROUP BY, насколько я понимаю, может выкинуть любую результирующую строку по nickname1
в итоге может получиться, что игроки по местам распределятся неверно, т.е.
1. nickname2
2. nickname1 c результатом result3
3. nickname3

Неактивен

 

#5 20.03.2010 18:24:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка с сортировкой и удалением дублей

ants написал:

и еще, GROUP BY, насколько я понимаю, может выкинуть любую результирующую строку по nickname1
в итоге может получиться, что игроки по местам распределятся неверно, т.е.
1. nickname2
2. nickname1 c результатом result3
3. nickname3

Это может произойти, если другие поля выбираются без группирующих функций. а в данном случае max(result) выберет максимальное значение.

Неактивен

 

#6 20.03.2010 18:27:07

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка с сортировкой и удалением дублей

ants написал:

vasya написал:

SELECT max(result) result

ни я, ни mysql синтаксис в этом месте не поняли
можно пояснить?

А что пишет MySQL?
Это сокращенная форма от max(result) AS result
Ключевое слово AS можно опустить.

Неактивен

 

#7 20.03.2010 18:36:04

ants
Участник
Зарегистрирован: 20.03.2010
Сообщений: 4

Re: Выборка с сортировкой и удалением дублей

vasya написал:

ants написал:

vasya написал:

SELECT max(result) result

ни я, ни mysql синтаксис в этом месте не поняли
можно пояснить?

А что пишет MySQL?
Это сокращенная форма от max(result) AS result
Ключевое слово AS можно опустить.

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson