Создание команд SQL для извлечения данных из заданных таблиц - PullRequest
0 голосов
/ 15 марта 2019

Добрый день, я студент колледжа, и в последнее время у нас было задание, в котором нам было поручено писать команды SQL по различным вопросам в зависимости от информации, которая должна отображаться из 3 разных таблиц. Вот инструкции и пример вопроса с предоставленным решением:

Инструкции + Пример вопроса и решения

Таблица данных

И ниже мои ответы:

Мои решенные вопросы, часть 1

Мои решенные вопросы, часть 2

Я хотел бы знать, есть ли еще способы сократить каждый из моих ответов на 7 вопросов, предпочтительно самый короткий код. Как любопытный человек, эффективность важна для меня, и идеально использовать гораздо более короткие команды. Например, я совершенно определенно уверен, что этот код из # 7 может быть сокращен:

SELECT  pNo, MAX(qty), (SELECT MAX(qty) FROM sp WHERE pNo IN (SELECT pNo                 
FROM p WHERE pName = 'Nut' OR pName = 'Cam') ) AS MAXcamORnut
FROM            sp
GROUP BY        pno
HAVING      MAX(qty) > ALL (SELECT qty FROM sp WHERE pNo IN(SELECT pNo FROM 
p
WHERE pName = 'Nut' OR pName = 'Cam'));

Кроме этого, у меня также есть два оставшихся нерешенных вопроса, которые я не имею ни малейшего понятия, как их решить, любые начальные идеи будут оценены. Заранее спасибо, ребята :) 1024 *

Нерешенные вопросы

1 Ответ

0 голосов
/ 15 марта 2019

Для уменьшения беспорядка в запросах SQL вы можете использовать CTE (Common Table Expressions) вместо подзапросов.

Пример:

WITH cte_sel_max as (
  SELECT nestID, max(eggID) as last_own_egg from nests where own_egg = TRUE group by nestID
)
select eggs.nestID, 
       eggs.eggID as false_egg_ID
  from eggs join cte_sel_max cte 
  on (eggs.nestID=cte.nestID and eggID > last_own_egg)

Ответы на вопросы о заданиях напрямую выходят за рамки этого сайта;)

...