Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Вопрос-Ответ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
продолжение обновления бд
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1190820&msg=18566153

апдате 4.4 стр 139
версия с sp стр 111, раздел 3.9 . 6 стр 71
версия с spj стр 257, раздел 7.4

стр 255.
7.3.5
найти имена поставщиков по крайней мере одной детали, поставляемой поставщиком
с номером 'S2'
+

PRAGMA foreign_keys = ON;
CREATE TABLE S(SId VARCHAR(4) PRIMARY KEY, Sname VARCHAR(50), Status INT, City VARCHAR(50));
INSERT INTO S VALUES('S1','Smith',20,'London');
INSERT INTO S VALUES('S2','Jones',10,'Paris');
INSERT INTO S VALUES('S3','Black',30,'Paris');
INSERT INTO S VALUES('S4','Clark',20,'London');
INSERT INTO S VALUES('S5','Adams',20,'Athens');

CREATE TABLE P(PId VARCHAR(4) PRIMARY KEY, Pname VARCHAR(50), Color VARCHAR(50), Weight REAL, City VARCHAR(50));
INSERT INTO P VALUES('P1','Nut','Red',12.0,'London');
INSERT INTO P VALUES('P2','Bolt','Green',17.0,'Paris');
INSERT INTO P VALUES('P3','Screw','Blue',17.0,'Rome');
INSERT INTO P VALUES('P4','Screw','Red',14.0,'London');
INSERT INTO P VALUES('P5','Cam','Blue',12.0,'Paris');
INSERT INTO P VALUES('P6','Cog','Red',19.0,'London');

CREATE TABLE J(JId VARCHAR(4) PRIMARY KEY, Jname VARCHAR(50), City VARCHAR(50));
INSERT INTO J VALUES('J1','Sorter','Paris');
INSERT INTO J VALUES('J2','Display','Rome');
INSERT INTO J VALUES('J3','OCR','Athens');
INSERT INTO J VALUES('J4','Console','Athens');
INSERT INTO J VALUES('J5','RAID','London');
INSERT INTO J VALUES('J6','EDS','Oslo');
INSERT INTO J VALUES('J7','Tape','London');


CREATE TABLE SPJ(SId VARCHAR(4), PId VARCHAR(4), JId VARCHAR(4), QTY INT, PRIMARY KEY (SId,PId,JId), FOREIGN KEY(SId) REFERENCES S(SId), FOREIGN KEY(PId) REFERENCES P(PId), FOREIGN KEY(JId) REFERENCES J(JId));
INSERT INTO SPJ VALUES('S1','P1','J1',200);
INSERT INTO SPJ VALUES('S1','P1','J4',700);
INSERT INTO SPJ VALUES('S2','P3','J1',400);
INSERT INTO SPJ VALUES('S2','P3','J2',200);
INSERT INTO SPJ VALUES('S2','P3','J3',200);
INSERT INTO SPJ VALUES('S2','P3','J4',500);
INSERT INTO SPJ VALUES('S2','P3','J5',600);
INSERT INTO SPJ VALUES('S2','P3','J6',400);
INSERT INTO SPJ VALUES('S2','P3','J7',800);
INSERT INTO SPJ VALUES('S2','P5','J2',100);
INSERT INTO SPJ VALUES('S3','P3','J1',200);
INSERT INTO SPJ VALUES('S3','P4','J2',500);
INSERT INTO SPJ VALUES('S4','P6','J3',300);
INSERT INTO SPJ VALUES('S4','P6','J7',300);
INSERT INTO SPJ VALUES('S5','P2','J2',200);
INSERT INTO SPJ VALUES('S5','P2','J4',100);
INSERT INTO SPJ VALUES('S5','P5','J5',500);
INSERT INTO SPJ VALUES('S5','P5','J7',100);
INSERT INTO SPJ VALUES('S5','P6','J2',200);
INSERT INTO SPJ VALUES('S5','P1','J4',100);
INSERT INTO SPJ VALUES('S5','P3','J4',200);
INSERT INTO SPJ VALUES('S5','P4','J4',800);
INSERT INTO SPJ VALUES('S5','P5','J4',400);
INSERT INTO SPJ VALUES('S5','P6','J4',500);


еще версии можно придумать?

SELECT SId,Sname,City 
  FROM S
  WHERE SId IN (
    SELECT DISTINCT SId 
      FROM SPJ 
      WHERE PId IN(
        SELECT DISTINCT PId 
          FROM SPJ 
          WHERE SId = 'S2'
        ) 
        AND SId <> 'S2'
  );
  
  SELECT distinct S.SId, S.SName, S.City 
     FROM S, SPJ 
     WHERE
        S.SId = SPJ.SID
     and  PId IN(
        SELECT DISTINCT PId 
          FROM SPJ 
          WHERE SId = 'S2'
        ) 
     AND S.SId <> 'S2'
;
     ---------

  SELECT distinct S.SId, S.SName, S.City 
     FROM S, SPJ p1, spj p2 
     WHERE
        S.SId = p1.SID
     and  p1.PId = p2.PId
   and  p2.SId = 'S2' 
    AND S.SId <> 'S2'
;





апд
7 издание - 269 6 издание 219
7.7.3 _____ 8.3.4
7.7.5 ______ 8.3.6
7.7.6 ______ 8.3.7
7.7.10 ____ 8.3.11

ответы к 6.n
295 7.15 _____ 248 8.11.13

Сообщение было отредактировано: 2 ноя 16, 15:21
31 окт 16, 00:48    [19839900]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
booby
Member

Откуда:
Сообщений: 2254
tchingiz
стр 255.
7.3.5
найти имена поставщиков по крайней мере одной детали, поставляемой поставщиком
с номером 'S2'
...


У вас порезана схема Дейта, от того запросы построены потенциально неправильно (логически ошибочно).
На конкретно так поставленный вопрос ответ должен искаться в отношении SP, а не SPJ.

Если вы настаиваете на SPJ и отсутствии SP, то либо вы не сможете вообще ответить на так заданный вопрос, либо в составе J у вас должны образоваться строки (одна строка), соответствующая "не проекту", или "фиктивному проекту", иначе вы сможете отобразить весь список деталей, которые способен поставлять некий поставщик.
(Для вашей базы данных может оказаться вполне допустимой ситуация, когда ни в каких из ведущихся вами проектов J некоторая деталь P ни от какого поставщика S еще не была
использована и для отображения таких деталей как выпускаемых поставщиком S вам придется первоначально записать все эти детали против специального "фиктивного" проекта
в J.

Ну и, почти всегда, то, что вы можете записать через IN может быть записано с использованием exists.
Вариант в ваших обозначениях и при настойчивом (вероятно ошибочном) отказе от SP как отношения, независимого от SPJ -
With SP as (
  Select Distinct SId, PId
  From SPJ
)
Select S.SId, S.Sname, S.City
Fron S, SP
Where 
          S.Sid = SP.Sid
  And  SP.Sid != 'S2'
  And Exists(
           Select * 
           From  SP as SP#
           Where 
              SP#.PId = SP.PId    
              And SP#.SId = 'S2'
         )

или такой вариант

With SP as (
  Select Distinct SId, PId
  From SPJ
)
Select S.SId, S.Sname, S.City
From S
Where 
  S.SId != 'S2' AND
  Exists(
    Select * 
    From  SP, SP as SP#
    Where 
              SP#.Pid = SP.Pid
       And  SP#.SId = 'S2'
       And SP.SId = S.SId
  )
31 окт 16, 02:30    [19839948]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
сенкс, я забыл про Exists

во второй версии не надо distinct

Select distinct S.SId, S.Sname, S.City
From S, SPj
Where 
          S.Sid = SPj.Sid
  And  SPj.Sid != 'S2'
  And Exists(
           Select * 
           From  SPj as SP1
           Where 
                     SP1.PId = SPj.PId    
              And SP1.SId = 'S2'
         )         
;

Select S.SId, S.Sname, S.City
From S
Where 
  S.SId != 'S2' AND
  Exists(
    Select * 
    From  SPj, SPj as SP1
    Where
             SPj.SId = S.SId 
       And  SPj.Pid = SP1.Pid
       And                  SP1.SId = 'S2'
  )
;


Сообщение было отредактировано: 31 окт 16, 12:50
31 окт 16, 12:03    [19840952]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
ничего не понял, про логически ошибочно

автор
найти имена поставщиков по крайней мере одной детали, поставляемой поставщиком
с номером 'S2'




автор

для отображения таких деталей как выпускаемых поставщиком S


Откуда взялись выпускаемые детали?

автор
либо в составе J у вас должны образоваться строки (одна строка), соответствующая "не проекту", или "фиктивному проекту", иначе вы сможете отобразить весь список деталей, которые способен поставлять некий поставщик.

если строки (соответствующая "не проекту",) не будет, то я смогу отобразить весь список
деталей, которые что?
31 окт 16, 12:14    [19841044]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
booby
Member

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

поставщики - имяреки S
детали - партнамберы P
Проекты - коденеймы J

SPJ - отношение, показывающее детали P какого S использованы в J
SP - отношение, которое показывает, какие P способен выпускать S

каких-то комбинаций (Pk, Sk) из SP может быть просто не быть в SPJ
Имхо, ответ на задачу надо искать методом опрашивания SP, а не SPJ

если строки (соответствующая "не проекту",) не будет, то я не смогу отобразить
весь список деталей, которые что? про которые достоверно известно (из состава SP),
что у некоего S соответствующий P есть в списке его номенклатуры.

Ответ, данный по результатам опроса SPJ будет опираться только на на те P и S,
зафиксировано в SPJ.
Этот ответ будет правильным, если случайно окажется, что вся номенклатура выпуска, показанная в SP окажется хотя бы однажды задействована в SPJ
31 окт 16, 14:21    [19841964]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
сорри Дейт, я Вас под этим ником не узнал


автор
SP - отношение, которое показывает, какие P способен выпускать S

где это можно вычитать?

Сообщение было отредактировано: 1 ноя 16, 23:41
1 ноя 16, 23:34    [19848674]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141


К сообщению приложен файл. Размер - 58Kb
1 ноя 16, 23:35    [19848675]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
это ВСЯ БАЗА ДАННЫХ. В ней нет пропущенных таблиц

К сообщению приложен файл. Размер - 141Kb
1 ноя 16, 23:38    [19848681]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141


К сообщению приложен файл. Размер - 121Kb
1 ноя 16, 23:39    [19848684]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
booby
Member

Откуда:
Сообщений: 2254
tchingiz,
вся - так вся, для данной серии упражнений.
Очень хорошо.
Значит - в этом наборе задач нельзя ошибиться с выбором источника данных, мое замечание оказалось по отношению к конкретной задаче неуместным и, тем самым - ошибочным.
Забудьте о нем.

PS
что до подразумевавшейся мной "всей базы", то "вся база" изображена в виде картинки на странице 53 (1.3 -> сущности и связи) 8го издания, в 7 должно быть где-то там же.
Далее используются фрагменты этой картины, по месту уточняемые.
Конкретно SP описана, например, в разделе 3.9 (страница 123 8го издания), где "вся база"
состоит из S, P и SP.


-------------- поправил
(страница 125 8го издания)


Сообщение было отредактировано: 2 ноя 16, 11:58
2 ноя 16, 01:59    [19848865]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
booby
PS
что до подразумевавшейся мной "всей базы", то "вся база" изображена в виде картинки на странице 53 (1.3 -> сущности и связи) 8го издания, в 7 должно быть где-то там же.


7 издании это стр. 42. рис 1.5. Пример диаграммы "сущность - связь" для базі данных
компании KnowWare, Inc

Сообщение было отредактировано: 29 ноя 16, 22:01
28 ноя 16, 17:29    [19943869]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
booby
tchingiz,

SP - отношение, которое показывает, какие P способен выпускать S

автор
Например, между поставщиками и деталями существуют связь SP:
каждый поставщик поставлят определенные детали, и, наоборот, каждая деталь поставляется определенными поставщиками

ок. О Вашем усложнении, как приближении к реальности, можно хотя бы упомянуть при решении задач. Хотя я склонен считать (это мое имхо, и я не экстрасенс),
что Дейт её не имел ввиду при формулировке задач.

Сообщение было отредактировано: 28 ноя 16, 17:38
28 ноя 16, 17:35    [19943902]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
я пытался повспоминать как использовать having и решал следующее:
найти поставщика для товара, который (поставщик) поставлял
больше половины общего количества товара.


первый правильный ответ получился таким
select s1.s, s1.p, s1.q 
  from (select sid s , pid  p , sum(qty) as Q 
          from spj 
          group by spj.sid, spj.pid
        ) s1
     , (select pid p, sum(qty)/2 as Q
	        from spj
         group by pid
      ) s2        
 where   
    s1.q > s2.q    
  and s1.p = s2.p
;


приветствуются другие решения (особенно с оптимизацией).

апд
поправил поля под схему из первого поста

Сообщение было отредактировано: 1 дек 16, 17:23
28 ноя 16, 17:44    [19943936]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
далее, следующее ошибочное решение поставило меня в полный тупик

drop table if exists temp;

create table temp as
	select p, sum(qty)/2 as Q
	from spj
	group by p;



===========

это ошибка -- тут сначала выполнилось соединение таблиц spj,temp, а потом суммирование в группе
select spj.sid, spj.pid as spjp, sum(qty) as Q
	from spj,temp 
	group by spj.sid, spj.pid
;


но почему в ответе на этот, не решающем поставленную задачу,
запрос

select spj.sid, spj.pid, sum(qty) as Q
	from spj,temp 
  group by spj.sid,spj.pid
	having spj.pid=temp.p


оказываются только поставщики товара p6?

Сообщение было отредактировано: 1 дек 16, 17:33
28 ноя 16, 18:10    [19944061]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
booby
Member

Откуда:
Сообщений: 2254
tchingiz
...
select s1.s, s1.p, s1.q 
  from (select s, p, sum(qty) as Q 
          from spj 
          group by spj.s,spj.p
        ) s1
     , (select p, sum(qty)/2 as Q
	        from spj
         group by p
      ) s2        
 where   
    s1.[q] > s2.q    
  and s1.[p] = s2.p


приветствуются другие решения (особенно с оптимизацией).


с having это, более или менее "классически" записывается так:

select s, p, sum(qty) as Q 
from spj 
group by spj.s,spj.p
having sum(qty) >= (Select Sum(qty) From spj ft Where ft.s = spj.s )/2

у этого же варианта есть некоторые шансы оказаться несколько дешевле исходного

Касательно второго вопроса - откровенно говоря, я не могу указать такую субд, про которую мне было бы известно, что она выполнит показанный вариант запроса.
я бы ждал ошибку сорта "выражение не включено в список group by"
<<У вас какая система, разрешите взглянуть?>>@
29 ноя 16, 01:56    [19945324]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141


К сообщению приложен файл. Размер - 37Kb
29 ноя 16, 22:02    [19949197]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
booby
Касательно второго вопроса - откровенно говоря, я не могу указать такую субд, про которую мне было бы известно, что она выполнит показанный вариант запроса.
я бы ждал ошибку сорта "выражение не включено в список group by"
<<У вас какая система, разрешите взглянуть?>>@


1 sqlite 3
2
Шо так все плохо :((

3
Кто куда не включен?

К сообщению приложен файл. Размер - 44Kb
1 дек 16, 17:39    [19956723]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
по другому:
booby
с having это, более или менее "классически" записывается так:

select s, p, sum(qty) as Q 
from spj 
group by spj.s,spj.p
having sum(qty) >= 
     (Select Sum(qty) 
         From spj ft 
         Where 
        --  ft.s = spj.s )/2  не правильно
            ft.p = spj.p )/2  -- это правильно?
     )
;


ок. В это сторону думал, из за суеты руки не дошли

Сообщение было отредактировано: 1 дек 16, 17:54
1 дек 16, 17:53    [19956792]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
booby
Касательно второго вопроса - откровенно говоря, я не могу указать такую субд, про которую мне было бы известно, что она выполнит показанный вариант запроса.
я бы ждал ошибку сорта "выражение не включено в список group by"


select spj.sid, spj.pid, sum(qty) as Q
	from spj,temp 
  group by spj.sid,spj.pid
	having spj.pid=temp.p

да, тут полная хрень.

видимо, в этот момент

having spj.pid=temp.p
(после группирования)
нет ни spj, ни temp (а есть соединненная ) и предикат бесполезен.
Бессмыслица в запросе - бессмыслица в ответе - вопрос снимается
1 дек 16, 18:00    [19956817]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
это (spj.pid=temp.p) надо выполнить до гроупБай, тогда сумма по поставщику и товару
будет правильная и выдать обе суммы.

drop table if exists temp;
create table temp as
	select pid p, sum(qty)/2 as pQ
	from spj
	group by pid 
;
select spj.sid, spj.pid, pQ, sum(qty) as spQ  
  from spj,temp 
  where spj.pid=temp.p
  group by spj.sid, spj.pid, pQ
  having spQ > pQ
;


К сообщению приложен файл. Размер - 32Kb
1 дек 16, 18:27    [19956906]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
booby
Member

Откуда:
Сообщений: 2254
tchingiz
по другому:
booby
с having это, более или менее "классически" записывается так:

select s, p, sum(qty) as Q 
from spj 
group by spj.s,spj.p
having sum(qty) >= 
     (Select Sum(qty) 
         From spj ft 
         Where 
        --  ft.s = spj.s )/2  не правильно
            ft.p = spj.p )/2  -- это правильно?
     )
;


ок. В это сторону думал, из за суеты руки не дошли

про правильно/неправильно - синтаксически оба варианта рабочие,
выбор зависит от детализации пропущенных, "очевидных" формулировки задачи.
"больше половины от поставленных данным поставщиком" - where ft.s = spj.s
"больше половины от общего объема поставок товара данного вида всеми поставщиками" Where ft.p = spj.p
2 дек 16, 00:53    [19957982]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
booby
Member

Откуда:
Сообщений: 2254
tchingiz
booby
Касательно второго вопроса - откровенно говоря, я не могу указать такую субд, про которую мне было бы известно, что она выполнит показанный вариант запроса.
я бы ждал ошибку сорта "выражение не включено в список group by"
<<У вас какая система, разрешите взглянуть?>>@


1 sqlite 3
2
Шо так все плохо :((

3
Кто куда не включен?


касательно
select spj.sid, spj.pid, sum(qty) as Q
	from spj,temp 
  group by spj.sid,spj.pid
	having spj.pid=temp.p

(здесь, предполагая, что речь идет о столбцах со скалярными значениями - для не скалярных я сам having записать не сумею)
Стандарт оговаривает, что в разделе having допустимо использование выражений, из которых образован group by, здесь group by spj.sid,spj.pid, т.е. законно использование
как spj.sid, так и spj.pid (и выражений, построенных над ними),
поэтому левая часть фильтра вида spj.pid=... законна.
Также стандарт оговаривает, что допустимо использование агрегатных выражений над столбцами, не попавшими в список выражений group by,
т.е. - в любой реализации будет законным использование агрегатных функций над qty,
которого нет списке group by - любых агрегатных функций.
Sum(qty), Min(qty), Max(qty), Count(qty), Avg(qty) - все одинаково законны.

Аналогично для temp.p - его нет в списке group by, но любая агрегатная функция над ним законна, т.е выражения вида having spj.pid=Max(temp.p) Или having spj.pid=Min(temp.p)
в некотором смысле обязаны выполнится любой sql-машиной.
Но, в выражении having spj.pid=temp.p к temp.p явно не применена никакая агрегатная функция.
Большинство sql-систем такой вариант условия забракует, сообщив, что оно не законно, здесь по причине того, что temp.p не входит в список выражения group by.
Раз конкретная реализация такое выполняет, то она неким образом расширяет стандартную трактовку условия для такого случая.
Технически это можно сделать двумя способами - либо неявно дописав temp.p в список group by, либо применив к нему "подходящую к случаю" агрегатную функцию.

Если глазом не видно, какой из двух вариантов произошел - читай документацию.
В которой для sqlite сказано, что к temp.p будет применена агрегатная функция
выбора случайного значения.
Т.е. - эта функция случайно выбрала 6 из набора значений в temp и потом с этими 6 сравнивались spj.pid
https://www.sqlite.org/lang_select.html#resultset
см раздел про having

ЗЫ
вообще у меня было короткое знакомство с sqlite, от которого осталось впечатление, что это очаровательная система.
В некоторых деталях весьма педантично следующая стандарту дальше почти всех,
а в других творчески и сугубо индивидуально трактуя его.
Благодаря чему имеет неповторимые (в других системах) особенности, придающие ей специальный шарм и аромат.
Но это было так давно (больше 10 лет назад), что деталей реализации having в ней я не
помню от слова совсем.
Отдельная печаль состоит в том, что к моменту знакомства с sqlite у меня была вполне сформированная практика использования sql других реализаций.
И моя рука просто физически не смогла бы записать условие в таком виде, даже если голова понимала бы, что эта конкретная реализация так писать позволяет.
2 дек 16, 02:28    [19958068]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
7 издание стр. 263 7.5.7
Указать название городов в которых находится более пяти красных деталей.
Я прочитал как более пяти разных названий красных деталей.


Поскольку в Лондоне наиболее колво типов - 3,
чтобы увидеть хоть чтото, то запрос написал типа такого


select pcity 
   from (
    select pcity,  pcolor, count(*)   cnt
      from p
      group by pcity, pcolor
 --     having   cnt >= 3
   )
   where cnt >=3
 ;






create table p ( 
	pi int,
	pname nchar(55),
	pcolor nchar(55),
	pweight double,
	pcity nchar(55)
);
insert into p (pi, pname, pcolor, pweight, pcity) values (1, 'Nut', 'Red', 12.0, 'London');
insert into p (pi, pname, pcolor, pweight, pcity) values (2, 'Bold', 'Green', 17.0, 'Paris');
insert into p (pi, pname, pcolor, pweight, pcity) values (3, 'Screw', 'Blue', 17.0, 'Rome');
insert into p (pi, pname, pcolor, pweight, pcity) values (4, 'Screw', 'Red', 14.0, 'London');
insert into p (pi, pname, pcolor, pweight, pcity) values (5, 'Cam', 'Blue', 12.0, 'Paris');
insert into p (pi, pname, pcolor, pweight, pcity) values (6, 'Cog', 'Red', 19.0, 'London');
13 дек 19, 18:05    [22040101]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
Dima T
Member

Откуда:
Сообщений: 15279
Зачем апать старый топик? Запутал. Дерево и SQL несовместимы, хотя есть гибриды для скрещивания ужа и ежа.

tchingiz
Указать название городов в которых находится более пяти красных деталей.

select Город from ... where Деталь = Красная having count(*) >= 5 group by Город 
13 дек 19, 20:08    [22040204]     Ответить | Цитировать Сообщить модератору
 Re: Дейт 7е издание +  [new]
tchingiz
Member

Откуда:
Сообщений: 38141
чьорт, блин
у тебя лучше ответ

select pcity 
   from p 
   where pcolor = 'Red' 
   group by pcity
   having count(*) >= 3
;

и почему я красные сразу не отобрал

2
по каждому упражнению из Дейта что ли новый топик заводить?

Сообщение было отредактировано: 14 дек 19, 11:29
14 дек 19, 11:21    [22040372]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Вопрос-Ответ Ответить