Объединение нескольких SQL-запросов - PullRequest
0 голосов
/ 15 мая 2009

Я хочу сделать запрос, чтобы перечислить кошек, которые продавались дольше, чем обычные кошки? У меня есть пять таблиц:

Животное, Продажа, AnimalOrderItem, AnimalOrder и SaleAnimal

Таблица животных: AnimalID, Имя, Категория (кошка, собака, рыба)

SaleAnimal table: SaleID, AnimalID, SalePrice

Таблица продаж: SaleID, дата, employeeID, CustomerID

Таблица AnimalOrderItem: OrderID, AnimalID, стоимость

AnimalOrder: OrderID, OrderDate, Дата получения, Идентификатор поставщика, стоимость доставки, идентификатор сотрудника

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

Я подумал о следующем ... сделать запрос, чтобы рассчитать количество дней, чтобы продать для всех, напр .: * 10101 *

[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;

После выполнения запроса я получил сообщение:

ORA-00921: неожиданный конец SQL Команда

Любые предложения! пожалуйста

Ответы [ 3 ]

1 голос
/ 15 мая 2009

Запросы могут быть объединены с подзапросом. Например,

select *
from (
    select * 
    from mytable
) subquery

Применение этого шаблона к вашей проблеме кажется довольно простым.

0 голосов
/ 15 мая 2009

Хорошо, я придумал это:

    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;
0 голосов
/ 15 мая 2009

Я не вижу закрывающую скобку, которая соответствует выбору avg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...