Xpoint
   [напомнить пароль]

Выбор 11 лучших

Метки: [без меток]
2004-11-22 03:07:45 [обр] Дмитрий Терёхин(0/1)[досье]
Есть таблица футболистов players
команда | игрок | возраст | сила | позиция
(team, name, age, power, position).
Вопрос одним как выбрать средний возраст одиннадцати лучших по силе?
  1. без ограничения по позиции, т.е. просто средний возраст 11 самых сильных
  2. если возможно, то с ограничением по позициям, причем 1 лучший из вратарей (position='Gk'), 1 из левых защитников (Ld), два из центральных (Cd) и так далее.
спустя 12 часов [обр] Владимир Палант(2/4445)[досье]

1.

SELECT age FROM players ORDER BY power DESC LIMIT 11

Должно быть оно...

  1. Думаю, что тут придётся всё-таки делать 11 запросов, то есть то же самое, что и выше, но LIMIT 1 и добавить WHERE position='...'.
спустя 5 минут [обр] Дмитрий Терёхин(0/1)[досье]
Владимир: возраст надо выбрать для всех команд. Если делать как в пункте 1 то для 1500 команд получится 1500 запросов. К тому же их надо отсортировать.
спустя 19 минут [обр] GRAy(8/259)[досье]
  1. Оракловый синтаксис, но важно только rownum - это номер текущей строки выборки
select avg(age)
from (
  select age age
  from players
  order by power desc
) where rownum < 12
  1. Простой селект возможен только в Oracle с применением аналитических функций. Можно извратиться с вложенными селектами но лучше написать процедурно - будет быстрее.
Powered by POEM™ Engine Copyright © 2002-2005