Помогите с задачей )

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Помогите с задачей )

Сообщение Sniper » 30.05.2006 20:54:03

Тут как погляжу на форуме народ рубит в SQL так вот вам для разминки мозгов, а мне для зачёта )
"Найти всех лиц у которых средняя зарплата за 2005 год отличается от средней на 15%, причём нужно определить 10% наиболее высокооплачиваемых сотрудников и найти среднюю зарплату по оставшимся 90%"
Посути надо спроектировать БД (создать соответствующие таблицы) и написать запрос ОДНИМ оператором

Решение: я начал вот так.
Таблица1:
'Сотрудники'('Cотрудник_id','Фамилия','Имя','Отчество');
Таблица2:
'Оплата_труда'('Оплата_id','Год','Зарплата');

Сначала найдём колличество всех сотрудников и вычислим 10% от них.
SELECT count(['Сотрудники'].['Cотрудник_id'])*0.1
FROM ['Сотрудники'];

Далее нам надо найти среднюю зарплату по оставшимся 90%
это что-то типа SELECT AVG ('Зарплата') FROM 'Оплата','Сотрудники'
WHERE ['Сотрудники'].['Cотрудник_id']=['Оплата_труда'].['Оплата_id'];
так?
А дальше? Принимаются ЛЮБЫЕ советы и куски решения %)
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение cranium » 30.05.2006 21:17:02

Речь о средней зарплате сотрудника за год или о средней зарплате среди сотрудников?
...отличается от средней на 15%...

в смысле не равно или больше меньше?
cranium
постоялец
 
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение Sniper » 30.05.2006 21:22:21

15% от средней зарплаты среди сотрудников -тех которых 90%
Может что-нить в ещё одну сущность впихнуть?
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Sniper » 31.05.2006 15:15:20

Помогите хоть чем нибудь!
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Aristarh Dark » 04.07.2007 08:46:18

Если еще актуально, то вот что у меня получилось.
Структурой я особо не запаривался, таблица T поля:
ID - Код сотрудника
YSum - Суммарная з/п за год
aYear - Год
Диалект T-SQL
Код: Выделить всё
SELECT * FROM T
WHERE
YSum BETWEEN
(Select TOP 1 AVG(YSum) as Sredn From
  (Select TOP 90 Percent * FROM T
  WHERE aYear=2005
  ORDER BY YSum) A)-0.15*(Select TOP 1 AVG(YSum) as Sredn From
  (Select TOP 90 Percent * FROM T
  WHERE aYear=2005
  ORDER BY YSum) B)
AND
(Select TOP 1 AVG(YSum) as Sredn From
  (Select TOP 90 Percent * FROM T
  WHERE aYear=2005
  ORDER BY YSum) C)+0.15*(Select TOP 1 AVG(YSum) as Sredn From
  (Select TOP 90 Percent * FROM T
  WHERE aYear=2005
  ORDER BY YSum) D)


Хотя, чесно сказать, такие выборки одним запросом делать как-то неудачно.
Aristarh Dark
незнакомец
 
Сообщения: 4
Зарегистрирован: 26.06.2007 10:02:03


Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru