Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Cредний возраст сотрудников по подразделениям  [new]
zeha_t
Member

Откуда:
Сообщений: 32
Подскажите как вывести средний возраст по подразделениям, т.е. столбец 1 - названия подразделдения, столбец 2 - средний возраст в нём.

Пока что удалось вывести сотрудников и их возраст (

select
Info.ФИО, Staff.Должность, Units.[Название подразделения], Units.[Вид подразделения],
'Возраст'=(datediff(yy, Info.[Дата рождения], getdate() ))
from Info, Staff, Units
where Info.[Код сотрудника]=Staff.[Код сотрудника]
and Staff.[Код подразделения]=Units.[Код подразделения]
and getdate() BETWEEN Staff.[Дата приёма] AND Staff.[Дата увольнения]

а дальше никак...(
27 апр 12, 09:16    [12477678]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
Glory
Member

Откуда:
Сообщений: 104751
Начните изучать аггрегатные функции - count(), sum(), avg() и тд
27 апр 12, 09:23    [12477706]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
qwerty112
Guest
zeha_t
Пока что удалось вывести сотрудников и их возраст (

ничё у тебя пока не "удалось"
select datediff(yy, '20110501', '20120430') 
----------- 
1

(1 row(s) affected)

---
среднее считается функцией avg
27 апр 12, 09:24    [12477712]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
zeha_t
Member

Откуда:
Сообщений: 32
qwerty112
zeha_t
Пока что удалось вывести сотрудников и их возраст (

ничё у тебя пока не "удалось"
select datediff(yy, '20110501', '20120430') 
----------- 
1

(1 row(s) affected)

---
среднее считается функцией avg


ну почему же не удалось то, возраст сотрудников то я вывел в столбец отдельный, а теперь хочу применить avg к этому столбцу + привязка по подразделениям, но пока безуспешно.
27 апр 12, 09:41    [12477809]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
zeha_t
Member

Откуда:
Сообщений: 32
Glory
Начните изучать аггрегатные функции - count(), sum(), avg() и тд


да читал, перечитал, но как всегда теория и практика...разные вещи, понятно что avg, предполагаю что надо вывести подразделения с возрастом сотрудников, потом avg и думаю group by по подразделениям, но проблема в том что как привязать avg к столбцу возраст из запроса
27 апр 12, 09:45    [12477837]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
zeha_t,слушай ты ведь только начал изучать/делаешь домашнюю работу по sql.По прошлому твоему вопросу было написано более чем достаточно.
А ты до сих пор лепишь.
..from Info, Staff, Units..

Это любовь к древностям?
Да и пора все же уже купить/скачать книжку по sql.
27 апр 12, 09:47    [12477846]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
qwerty112
Guest
zeha_t
qwerty112
пропущено...

ничё у тебя пока не "удалось"
select datediff(yy, '20110501', '20120430') 
----------- 
1

(1 row(s) affected)

---
среднее считается функцией avg


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

даа хоть в 2-а отдельных, - считает неправильно,
не видиш чтоле ?
27 апр 12, 09:55    [12477879]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
Glory
Member

Откуда:
Сообщений: 104751
zeha_t
да читал, перечитал, но как всегда теория и практика...разные вещи, понятно что avg, предполагаю что надо вывести подразделения с возрастом сотрудников, потом avg и думаю group by по подразделениям, но проблема в том что как привязать avg к столбцу возраст из запроса

И какая же с "привязать avg к столбцу возраст из запроса" ?
27 апр 12, 10:04    [12477925]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
zeha_t
Member

Откуда:
Сообщений: 32
denis2710
zeha_t,слушай ты ведь только начал изучать/делаешь домашнюю работу по sql.По прошлому твоему вопросу было написано более чем достаточно.
А ты до сих пор лепишь.
..from Info, Staff, Units..

Это любовь к древностям?
Да и пора все же уже купить/скачать книжку по sql.


Да это любовь наверное )
Так мне проще и понятнее, буду уметь как вы, тогда буду применять ваш современный синтаксис, а пока увы токо так.

А книжек по sql скачал кучу и с примерами и без и для чайников и для профи, но это книги...
К примеру про функцию avg написано практически везде - берём avg ставим его к столбцу с целочисленными значениями и получаем среднее, да прекрасно,
НО СТОЛБЦА ТО НЕТ, ЕГО ЕЩЁ НАДО ВЫВЕСТИ,
короче книги есть книги...
Может вы со своим опытом подскажете книжечку хорошую я её бы с удовольствием скачал
27 апр 12, 10:19    [12477992]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
zeha_t
Member

Откуда:
Сообщений: 32
qwerty112
zeha_t
пропущено...


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

даа хоть в 2-а отдельных, - считает неправильно,
не видиш чтоле ?


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

Средний да пока считает неправильно

select Units.[Название подразделения],
avg(datediff(yy, Info.[Дата рождения], getdate() ))
from Units, Info
group by Units.[Название подразделения]
27 апр 12, 10:22    [12478011]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
zeha_t
Member

Откуда:
Сообщений: 32
ладно ребят, забейте. Сам разберуся
27 апр 12, 10:22    [12478017]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
Glory
Member

Откуда:
Сообщений: 104751
zeha_t
К примеру про функцию avg написано практически везде - берём avg ставим его к столбцу с целочисленными значениями и получаем среднее, да прекрасно,
НО СТОЛБЦА ТО НЕТ, ЕГО ЕЩЁ НАДО ВЫВЕСТИ,

Вообще то там написано не столбец, а выражение
27 апр 12, 10:33    [12478104]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
zeha_t
Member

Откуда:
Сообщений: 32
думаю как то так
select Units.[Название подразделения],
AVG (datediff(yy, Info.[Дата рождения], getdate())) as Average_Age
from Units,Info, Staff
where Staff.[Код подразделения]=Units.[Код подразделения]
and Staff.[Код сотрудника]=Info.[Код сотрудника]
and getdate() BETWEEN Staff.[Дата приёма] AND Staff.[Дата увольнения]
group by Units.[Название подразделения]
27 апр 12, 11:03    [12478309]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
iljy
Member

Откуда:
Сообщений: 8711
zeha_t
Так мне проще и понятнее, буду уметь как вы, тогда буду применять ваш современный синтаксис, а пока увы токо так.

Пока "увы только так" - оно "увы" и останется.
27 апр 12, 12:15    [12478912]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
zeha_t,

если человек родился 31 декабря 2011 года, а мы смотрим его возраст 1 января 2012 года,
то какой у него получится возраст по-Вашему? Если считать просто DATEDIFF(YEAR,'20111231','20120101')

Мы же не в Китае!
Это там в момент рождения человеку уже один год.
А в Новый год каждый китаец прибавлял себе когда-то ещё год!

Сейчас, они, правда, перешли на европейскую систему...
Простите за оффтоп
27 апр 12, 12:41    [12479087]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
zeha_t,
автор
короче книги есть книги...
Может вы со своим опытом подскажете книжечку хорошую я её бы с удовольствием скачал

Для начала
Microsoft SQL Server 2008. Основы T-SQL
27 апр 12, 14:48    [12480148]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
iap
если человек родился 31 декабря 2011 года, а мы смотрим его возраст 1 января 2012 года,
то какой у него получится возраст по-Вашему? Если считать просто DATEDIFF(YEAR,'20111231','20120101')

можно как-то так
+

declare @targetdate as date = cast(sysdatetime() as date) ;
declare @Employees table
  (
    name varchar(150)
  , birthdate datetime
  )
insert  into @Employees
        ( name, birthdate )
values  ( 'Вася Пупкин', '20120407' )
,       ( 'Вася Пупкин 1', '19180407' )
,       ( 'Вася Пупкин 2', '20120101' )
,       ( 'Вася Пупкин 3', '20000407' )
,       ( 'Вася Пупкин 4', '19700407' )

select  name
      , birthdate
      , ( cast(convert(char(8), @targetdate, 112) as int) - cast(convert(char(8), birthdate, 112) as int) ) / 10000 as age
from    @Employees ;

27 апр 12, 14:56    [12480237]     Ответить | Цитировать Сообщить модератору
 Re: Cредний возраст сотрудников по подразделениям  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
denis2710
iap
если человек родился 31 декабря 2011 года, а мы смотрим его возраст 1 января 2012 года,
то какой у него получится возраст по-Вашему? Если считать просто DATEDIFF(YEAR,'20111231','20120101')

можно как-то так
+
+

declare @targetdate as date = cast(sysdatetime() as date) ;
declare @Employees table
  (
    name varchar(150)
  , birthdate datetime
  )
insert  into @Employees
        ( name, birthdate )
values  ( 'Вася Пупкин', '20120407' )
,       ( 'Вася Пупкин 1', '19180407' )
,       ( 'Вася Пупкин 2', '20120101' )
,       ( 'Вася Пупкин 3', '20000407' )
,       ( 'Вася Пупкин 4', '19700407' )

select  name
      , birthdate
      , ( cast(convert(char(8), @targetdate, 112) as int) - cast(convert(char(8), birthdate, 112) as int) ) / 10000 as age
from    @Employees ;

Да это всё древний баян - достаточно поискать по этому форуму слово "возраст".
Найдутся десятки тем.
Просто автору этой темы темы лень это делать
27 апр 12, 15:00    [12480291]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить