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

Откуда:
Сообщений: 532
Добрый день. Можете подсказать мне: есть задание
1. Вывести по всем округам количество домов с корпусами и общее количество домов.
2. Вывести районы "Юго-Западного" административного округа в которых домов больше 300, с указанием количеством домов.
3. Вывести все административные округа с указанием количества районов в каждом.

Есть таблица,не буду всю ее сюда копировать,ибо много

Есть полынй адресс с указанием данных
Fulladress

Insert into ADDRESS (ID,FULLADDRESS,AREAID,HOUSENUMBER,HOUSENUMBERADDITIONAL,CORPSNUMBER,BUILDINGNUMBER,STREETID) values ('18935','Введенского ул., д.26, к.1','702',26,null,'1',null,'1513');
Insert into ADDRESS (ID,FULLADDRESS,AREAID,HOUSENUMBER,HOUSENUMBERADDITIONAL,CORPSNUMBER,BUILDINGNUMBER,STREETID) values ('18936','Введенского ул., д.26, к.2','702',26,null,'2',null,'1513');
Insert into ADDRESS (ID,FULLADDRESS,AREAID,HOUSENUMBER,HOUSENUMBERADDITIONAL,CORPSNUMBER,BUILDINGNUMBER,STREETID) values ('19068','Профсоюзная ул., д.98, к.2','702',98,null,'2',null,'2108');
Insert into ADDRESS (ID,FULLADDRESS,AREAID,HOUSENUMBER,HOUSENUMBERADDITIONAL,CORPSNUMBER,BUILDINGNUMBER,STREETID) values ('18948','Волгина Академика ул., д.5','702',5,null,null,null,'1025');
Insert into ADDRESS (ID,FULLADDRESS,AREAID,HOUSENUMBER,HOUSENUMBERADDITIONAL,CORPSNUMBER,BUILDINGNUMBER,STREETID) values ('18880','Бутлерова ул., д.4, к.3','702',4,null,'3',null,'1081');
Insert into ADDRESS (ID,FULLADDRESS,AREAID,HOUSENUMBER,HOUSENUMBERADDITIONAL,CORPSNUMBER,BUILDINGNUMBER,STREETID) values ('18886','Бутлерова ул., д.16','702',16,null,null,null,'1081');
Insert into ADDRESS (ID,FULLADDRESS,AREAID,HOUSENUMBER,HOUSENUMBERADDITIONAL,CORPSNUMBER,BUILDINGNUMBER,STREETID) values ('18949','Волгина Академика ул., д.7','702',7,null,null,null,'1025');

AREA
------ AREA ------
Insert into AREA (ID,NAME,DISTRICTID) values ('101','Пресненский','100');
Insert into AREA (ID,NAME,DISTRICTID) values ('102','Красносельский','100');
Insert into AREA (ID,NAME,DISTRICTID) values ('103','Хамовники','100');
Insert into AREA (ID,NAME,DISTRICTID) values ('104','Таганский','100');
Insert into AREA (ID,NAME,DISTRICTID) values ('105','Замоскворечье','100');
Insert into AREA (ID,NAME,DISTRICTID) values ('106','Тверской','100');


------ DISTRICT ------
Insert into DISTRICT (ID,FULLNAME,SHORTNAME) values ('100','Центральный','ЦАО');
Insert into DISTRICT (ID,FULLNAME,SHORTNAME) values ('200','Северный','САО');
Insert into DISTRICT (ID,FULLNAME,SHORTNAME) values ('300','Северо-Восточный','СВАО');
Insert into DISTRICT (ID,FULLNAME,SHORTNAME) values ('400','Восточный','ВАО');
Insert into DISTRICT (ID,FULLNAME,SHORTNAME) values ('500','Юго-Восточный','ЮВАО');
Insert into DISTRICT (ID,FULLNAME,SHORTNAME) values ('600','Южный','ЮАО');

По 1-му запросу я создал селект

select FULLADRESS from dbo.adress
where areid = 101
То есть этим простым запросом я вывел все адреса по 101 округу

Соответсвенно, как мне вывести и подсчитать общее кол-во домов и общее кол-во домов с корпусами по всем округам?

Сделаю отступление:я совсем начинающий и, предполагаю, что тут нужны будут joinЫ..Никак не пойму механику работы оного..
9 окт 14, 07:36    [16679793]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
select Name as [округ]
,sum([общее кол-во домов ]) as [общее кол-во домов ]
,sum([общее кол-во домов с корпусами]) as [общее кол-во домов с корпусами]
from
(select t2.Name,t1.STREETID
,COUNT(distinct HOUSENUMBER) as [общее кол-во домов ]
,COUNT(distinct case when CORPSNUMBER is not null then HOUSENUMBER else null end) as [общее кол-во домов с корпусами]
from dbo.Address t1
join dbo.Area t2 on t2.ID = t1.AREAID
group by t2.Name, t1.STREETID) t
group by Name
9 окт 14, 08:20    [16679869]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 532
LexusR
select Name as [округ]
,sum([общее кол-во домов ]) as [общее кол-во домов ]
,sum([общее кол-во домов с корпусами]) as [общее кол-во домов с корпусами]
from
(select t2.Name,t1.STREETID
,COUNT(distinct HOUSENUMBER) as [общее кол-во домов ]
,COUNT(distinct case when CORPSNUMBER is not null then HOUSENUMBER else null end) as [общее кол-во домов с корпусами]
from dbo.Address t1
join dbo.Area t2 on t2.ID = t1.AREAID
group by t2.Name, t1.STREETID) t
group by Name


Блин,здорово..попробую разобраться. Значит выбираем Имя(name) из Округ(Area?),далее суммирует ([общее кол-во домов])(это так столбец будет называться) и кол-во домов с корпусами

Из(select) t2.Name(что такое t2-2-я таблица,т.е. AREA?),из 1-й талицы ИД улицы. Далее выводит кол-во домов с номером. Далее выводит кол-во(что такое distinct case?) номера корупсов(Corpsenumber) с ненулевыми значениями из (FROM) таблицы dbo.Adress
Далее объединение(join) из таблицы Area береться ид и объединется с areaID из 1-й таблицы.
Далее групировка по имени из 2-й таблицы,Ид улицы из 1-й таблицы
А что такое t1.STREETID) t ?
9 окт 14, 08:42    [16679914]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 532
Это все по 1-му заданию,Верно? Еще вопрос, как скуль определяет что t1 -это таблица Dbo.adress,а t2-это areaid?
9 окт 14, 08:43    [16679916]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 532
Максим Александровитч
LexusR
select Name as [округ]
,sum([общее кол-во домов ]) as [общее кол-во домов ]
,sum([общее кол-во домов с корпусами]) as [общее кол-во домов с корпусами]
from
(select t2.Name,t1.STREETID
,COUNT(distinct HOUSENUMBER) as [общее кол-во домов ]
,COUNT(distinct case when CORPSNUMBER is not null then HOUSENUMBER else null end) as [общее кол-во домов с корпусами]
from dbo.Address t1
join dbo.Area t2 on t2.ID = t1.AREAID
group by t2.Name, t1.STREETID) t
group by Name


Блин,здорово..попробую разобраться. Значит выбираем Имя(name) из Округ(Area?),далее суммирует ([общее кол-во домов])(это так столбец будет называться) и кол-во домов с корпусами

Из(select) t2.Name(что такое t2-2-я таблица,т.е. AREA?),из 1-й талицы ИД улицы. Далее выводит кол-во домов с номером. Далее выводит кол-во(что такое distinct case?) номера корупсов(Corpsenumber) с ненулевыми значениями из (FROM) таблицы dbo.Adress
Далее объединение(join) из таблицы Area береться ид и объединется с areaID из 1-й таблицы.
Далее групировка по имени из 2-й таблицы,Ид улицы из 1-й таблицы
А что такое t1.STREETID) t ?


А это 2-я скобка
9 окт 14, 08:46    [16679920]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Glory
Member

Откуда:
Сообщений: 104751
Максим Александровитч
Еще вопрос, как скуль определяет что t1 -это таблица Dbo.adress,а t2-это areaid?

Он использует написанный вами текст запороса. В котором этим таблицам вы явно назначаете эти псевдонимы.
9 окт 14, 08:46    [16679923]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 532
Glory
Максим Александровитч
Еще вопрос, как скуль определяет что t1 -это таблица Dbo.adress,а t2-это areaid?

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

Так он же присвает уже когда пишешь join join dbo.Area t2 или это просто графическое отображение столбца вцыводимого? я думал, что сначала присваиваешь таблице Dbo.adress название t1,а потом уже оперериуешь им. Я неправ?
9 окт 14, 08:55    [16679942]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Максим Александровитч
Glory
пропущено...

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

Так он же присвает уже когда пишешь join join dbo.Area t2 или это просто графическое отображение столбца вцыводимого? я думал, что сначала присваиваешь таблице Dbo.adress название t1,а потом уже оперериуешь им. Я неправ?

правы - это называется alias(псевдоним) чтобы ссылаться на таблицу по короткому идентификатору
а собственно присвоение происходит в директиве FROM

from dbo.Address t1
join dbo.Area t2
9 окт 14, 08:58    [16679950]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Glory
Member

Откуда:
Сообщений: 104751
Максим Александровитч
я думал, что сначала присваиваешь таблице Dbo.adress название t1,а потом уже оперериуешь им. Я неправ?

Именно так и происходит в данном запросе. Сначала дается псевдоним, а потом он используется.
Вы не хотите начать изучение теории с документации ?
9 окт 14, 09:00    [16679956]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
а собственно алгоритм прост-
1 сначала находим количество неповторяющихся номеров домов(и домов с корпусами) в разрезе идентификатора улицы
а потом их суммируем сгруппировав по каждому округу
9 окт 14, 09:01    [16679958]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 532
Glory
Максим Александровитч
я думал, что сначала присваиваешь таблице Dbo.adress название t1,а потом уже оперериуешь им. Я неправ?

Именно так и происходит в данном запросе. Сначала дается псевдоним, а потом он используется.
Вы не хотите начать изучение теории с документации ?

Разве select это не начало? Если нет,то с чего можно начать?С множеств?И самая большая проблем в том, что сделать и понять мне нажо это за неделю..
9 окт 14, 09:01    [16679966]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Glory
Member

Откуда:
Сообщений: 104751
Максим Александровитч
Разве select это не начало?

Начало чего ?
Начало вашей личной теории об синтаксисе SQL ?

Максим Александровитч
Если нет,то с чего можно начать?

С изучения синтаксиса.

Максим Александровитч
И самая большая проблем в том, что сделать и понять мне нажо это за неделю..

А докторскую не надо еще случайно защитить ?
9 окт 14, 09:06    [16679977]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 532
LexusR
Максим Александровитч
пропущено...

Так он же присвает уже когда пишешь join join dbo.Area t2 или это просто графическое отображение столбца вцыводимого? я думал, что сначала присваиваешь таблице Dbo.adress название t1,а потом уже оперериуешь им. Я неправ?

правы - это называется alias(псевдоним) чтобы ссылаться на таблицу по короткому идентификатору
а собственно присвоение происходит в директиве FROM

from dbo.Address t1
join dbo.Area t2


Прошу прощения за глупость,но в этом куске

select Name as [округ]
,sum([общее кол-во домов ]) as [общее кол-во домов ]
,sum([общее кол-во домов с корпусами]) as [общее кол-во домов с корпусами]
from
(select t2.Name,t1.STREETID
Где вот идет посыл,что name береться из 2-й таблицы, а streetid из 1-й?Т.е. t1 и t2 указывает на то, что t1-это dbo.Adress,а t2-это AREAID. Ведь присвоение этим таблицам просходит позднее,а в запросе пишеться,как буд-то присвоены имена..
Ну и каламбур
9 окт 14, 09:07    [16679981]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Glory
Member

Откуда:
Сообщений: 104751
Максим Александровитч
Ведь присвоение этим таблицам просходит позднее,

Позднее чего ?
Откуда вы знаете про порядок выполнения запроса ? Сами придумали ?
9 окт 14, 09:09    [16679990]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 532
Glory
Максим Александровитч
Разве select это не начало?

Начало чего ?
Начало вашей личной теории об синтаксисе SQL ?

Максим Александровитч
Если нет,то с чего можно начать?

С изучения синтаксиса.

Максим Александровитч
И самая большая проблем в том, что сделать и понять мне нажо это за неделю..

А докторскую не надо еще случайно защитить ?


Доктроская, к моему стыду, уже есть.

И самое забавное, что мне это почти не потребуется, я имею ввид язык скуль, ибо запросы пишутся в конторе по готовым шаблонам. Ну и теоретически я знаю, что значат Select,from,where,join и так далее.А вот с предметно-ориентированной областью проблемы.
9 окт 14, 09:10    [16679993]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 532
Glory
Максим Александровитч
Ведь присвоение этим таблицам просходит позднее,

Позднее чего ?
Откуда вы знаете про порядок выполнения запроса ? Сами придумали ?

Я просто думаю, что все идет по порядку. Сначала присвоение таблицам имен,далее селект по определенным параметрам. А тут получается, что сначала селект с уже присвоенными значениями, которые присвоены уже поззднее
9 окт 14, 09:11    [16680003]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Glory
Member

Откуда:
Сообщений: 104751
Максим Александровитч
Я просто думаю, что все идет по порядку.

Разумеется по порядку. Только вот не по вашему порядку, а по серверному.
9 окт 14, 09:13    [16680012]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 532
Glory
Максим Александровитч
Я просто думаю, что все идет по порядку.

Разумеется по порядку. Только вот не по вашему порядку, а по серверному.

Все непросто,ибо подумал,что порядок тот, что в серевере, придумали люди..ан нет.Киборги
9 окт 14, 09:16    [16680019]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выводу параметров  [new]
Glory
Member

Откуда:
Сообщений: 104751
Максим Александровитч
Все непросто,ибо подумал,что порядок тот, что в серевере, придумали люди..ан нет.Киборги

Идите и изучайтке синтаксис.
9 окт 14, 09:16    [16680024]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить