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

Откуда:
Сообщений: 4
есть две таблицы: 123(Kind,id_kind) которая хранит названия работ и podryad(boss,executor,date_begin, date_end,id_kind) которая хранит договора подряда. составить запрос, определяющий Количество предпринимателей-картофелеводов(id_kind=3), нанимавших более 3-х человек (для каждого года, когда такие работники нанимались). Если начать с я такого запроса:
 select boss, COUNT(executor)
 from Podryad 
 group by boss
выводит количество подрядчиков, нанятых каждым работодателем, но без учета года. Как добавить разбиение на года?
13 окт 11, 10:49    [11431821]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по group by  [new]
_ч_
Member

Откуда:
Сообщений: 1446
Partizan4ek,

наверное добавить условие в where
13 окт 11, 10:52    [11431866]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по group by  [new]
trew
Member

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

Наверно, так будет не совсем верно т.к. договор может быть на несколько лет.
 select boss, COUNT(executor) AS cc, YEAR(date_begin) AS yy
 from Podryad 
 -- where id_kind=3
 group by boss, YEAR(date_begin)
 HAVING COUNT(executor)>3

Может создать дополнительную табличку yy (Года)?

select boss, COUNT(executor) AS cc, YEAR(yy.Год) AS ss
 from Podryad 
INNER JOIN yy ON yy.Год  BETWEEN  Year(date_begin) AND Year(date_end)
 -- where id_kind=3
 group by boss, YEAR(yy.Год)
 HAVING COUNT(executor)>3

Версия сервере не известна?
13 окт 11, 12:20    [11432857]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по group by  [new]
Partizan4ek
Member

Откуда:
Сообщений: 4
trew,
при создании, правда не таблицы, а представления, результаты получается некорректны, так что пока остается без годов :
select  (COUNT(boss)/COUNT(executor))as колич_предп,COUNT(executor)as колич_подрядов, id_kind
 from Podryad  
 group by boss,id_kind
 having COUNT(executor)>='3' and id_kind=3
Спасибо за помощь (:
13 окт 11, 13:58    [11433849]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по group by  [new]
Ара Тор и Ара Кул
Member

Откуда:
Сообщений: 5
Партизанек,
podryad(boss,executor,date_begin, date_end,id_kind)

boss нанимает executor-а для выполнения работы id_kind с date_begin до date_end - ОДИН ДОГОВОР

А все тоже самое кроме периода работ - другой договор?
Один и тот же договор - одни и те же boss, date_begin, date_end, id_kind? Если да, то группу по ним с HAVING COUNT(executor)>3 и
select count(distinct boss).


если не SQL2005 со своими операторами, то по-простому

create table #подряды (boss ..., 
                                 date_begin ..., 
                                 date_end ..., 
                                 id_kind ...);
go
insert into #подряды 
select boss, date_begin, date_end, id_kind
from podryad 
group by boss, date_begin, date_end, id_kind 
having count(executor)>3
go
select count(distinct boss) from #подряды
13 окт 11, 15:53    [11435077]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить