У меня есть следующие таблицы:
PRODUCT ( ProdId, Name, Price, Weight, Category, Description, … )
DETAIL ( OrdId, ProdId, Qty, … )
ORDER ( OrdId, ClientId, Amount, OrdDate, DeliveryDate, ChosenStoreId, … )
и я должен описать простыми словами (т.е. не программисту), что делает следующий запрос:
select * from Order O
where Amount < 0.95 * ( select sum( Qty * Price ) from Product natural join Detail
where OrderId = O.OrderId )
Моим первоначальным ответом было то, что он показывал заказы с наименьшими суммами, что составляет всего 5% от них, но он был помечен как неправильный.
Еще одна мысль, которая у меня была, - возможно, она представляла скидку, однако в описании упражнения ничего не говорится о скидках, поэтому я думаю, что это также неверно.
Может кто-нибудь сказать мне, что делает запрос? Заранее спасибо.
Примечание: кроме таблиц, это вся необходимая информация для запроса.
Я не одобряю natural join
, но это отдельная проблема.
Возвращаются строки, в которых amount
заказа составляет менее 95% от суммы цен товаров в заказе.
Причина разницы неясна - это может быть связано со скидками на уровне order
; это может быть связано с дополнительными расходами, такими как налоги или доставка; или могут быть и другие причины.
Re Гордон Я также не одобряю natural join
. Запрос кажется намеренно загадочным, тем более что нет примеров данных. Хорошая стратегия - написать SQL в более общем синтаксисе и сделать вывод, см. Ниже:
select o.OrdId,
sum(o.Amount) Amount,
sum(d.Qty * p.Price) QtyPrice
from Order as o
left join Detail as d on d.OrdId = o.OrdId
left join Product as p on p.ProdId = d.ProdId
group by o.OrdId
having sum(o.amount) < (0.95 * sum(d.Qty * p.Price))
Мне этот запрос возвращает
Как вы сказали, это может быть трекер скидок или, возможно, поле o.Amount
заполняется независимо от таблиц Detail
и Product
.
inner join
. Или, возможно, вам нужно видетьnull
значения между двумя таблицами, поэтому вы используетеleft join
. Объединения огромны, и их использование сильно влияет на вывод запроса. Использование такихnatural join
масокnatural join
которые затрудняют отладку кода для вас и других.