[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача на 1 000 000 $
SliveR
Помогите решить следующую задачу:

дана таблица "table" в которой содержаться следующие данные - id команды (team_id) - участник команды (member) - очки (score). Нужно выбрать лучшего участника из каждой команды, то есть результат запроса должен содержать все три поля, где участник лучший по очкам и так для каждой команды.

Пожалуйста представьте полный запрос. Вот таблица - 'table':

team_id | member | score
------------------------------
1 | A | 10
------------------------------
1 | B | 11
------------------------------
1 | C | 12
------------------------------
2 | D | 11
------------------------------
2 | E | 9
------------------------------

В результате запроса хочу получить:

team_id | member | score
------------------------------
1 | C | 12
------------------------------
2 | D | 11
------------------------------

Сделать это нужно одним запросом с использованием вложенных, если получится без вложенных - флаг в руки. Если будут другие предложения, то я их тоже хочу услышать.



Спустя 1 час, 2 минуты, 29 секунд (12.11.2006 - 12:05) Rem написал(а):
 
$sQuery="SELECT * FROM `table` ORDER BY `score` DESC;";
$rRes=mysql_query($sQuery);
while ($oMember=mysql_fetch_object($rRes))
{
$team_id=$oMember->team_id;
$a[$team_id]++;
if ($a[$team_id]<2)
{
//вывод того, что надо
}
else
{
//ничего не делаем, такая ко*цензура* уже была
}
}
 


жду лям. :D

Спустя 1 час, 10 минут, 34 секунды (12.11.2006 - 13:15) 4ervyak написал(а):
$query = ("SELECT `team_id`,`member`,`score`
FROM `table1`
WHERE (`team_id`,`score`) in
(SELECT `team_id`,MAX(`score`)
FROM `table1`
GROUP BY `team_id`)");

Спустя 15 минут, 10 секунд (12.11.2006 - 13:31) SliveR написал(а):
Отличное решение, я писал подобное, но искал в множестве только по одному параметру, а не по паре, поэтому ничего не получалось и запарился решать.

Вот еще одно решение этой задачи, кому интересно:

SELECT T.Team, T.Member, S.MSCORE FROM
(SELECT Team, MAX( Score ) AS MSCORE FROM tbl GROUP BY Team) S, tbl T
WHERE T.Team = S.Team AND T.Score = S.MSCORE
GROUP BY T.Team, T.Member, S.MSCORE

Предыдущее конечно более элегантное, но это как вариант.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.