Объединение нескольких SQL-запросов
Вопрос
Я хочу сделать запрос, чтобы получить список кошек, продажа которых заняла больше времени, чем у обычных кошек?У меня есть пять таблиц:
Animal, Sale, AnimalOrderItem, AnimalOrder и SaleAnimal
Таблица животных:AnimalId, название, категория (кошка, собака, рыба)
РаспродажаСтол для животных:Saleid, AnimalId, SalePrice
Таблица продажи:Sailid, date, employeeid, customerid
Таблица AnimalOrderItem:OrderId, AnimalId, стоимость
AnimalOrder:OrderId, OrderDate, DecivingDate, PulfierID, ShippingCost, Employeeid
Есть и другие таблицы, я не думаю, что они влияют на запрос.
Я подумал о следующем...сделайте запрос, чтобы рассчитать дни продажи для всех примеров:
[SaleDate]-[ReceiveDate] AS DaysToSell
Have the INNER JOIN built:
Sale INNER JOIN ((AnimalOrder INNER JOIN (Animal INNER JOIN AnimalOrderItem
ON Animal.AnimalID = AnimalOrderItem.AnimalID) ON AnimalOrder.
OrderID = AnimalOrderItem.OrderID) INNER JOIN SaleAnimal ON Animal.
AnimalID = SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID
Создайте еще один запрос на основе приведенного выше запроса.
SELECT AnimalID, Name, Category, DaysToSell
WHERE Category="Cat" AND DaysToSell>
(SELECT Avg(DaysToSell)
FROM the earlier query
WHERE Category="Cat"
ORDER BY DaysToSell DESC;
После выполнения запроса я получил сообщение об ошибке
ОРА-00921:неожиданный конец команды SQL
Какие-либо предложения!пожалуйста
Решение
Запросы можно комбинировать с подзапросом.Например,
select *
from (
select *
from mytable
) subquery
Применение этого шаблона к вашей проблеме кажется довольно простым.
Другие советы
Я не вижу закрытой скобки, соответствующей выбранному среднему значению.
Хорошо, я придумал это:
SELECT AnimalID, Name, Category,
[SaleDate]-[ReceiveDate] AS DaysToSell
FROM Sale INNER JOIN ((AnimalOrder INNER JOIN (Animal INNER JOIN AnimalOrderItem ON Animal.AnimalID = AnimalOrderItem.AnimalID) ON AnimalOrder.OrderID = AnimalOrderItem.OrderID)
INNER JOIN SaleAnimal ON Animal.AnimalID = SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID
WHERE Category = "Cat"
AND ([SaleDate]-[ReceiveDate]) > (SELECT AVG([SaleDate]-[ReceiveDate])
FROM Sale INNER JOIN ((AnimalOrder INNER JOIN (Animal INNER JOIN AnimalOrderItem ON Animal.AnimalID = AnimalOrderItem.AnimalID) ON AnimalOrder.OrderID = AnimalOrderItem.OrderID)
INNER JOIN SaleAnimal ON Animal.AnimalID =SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID
WHERE Category = "Cat")
ORDER BY ([SaleDate]-[ReceiveDate]) DESC;