Combinando múltiplos SQL Queries
Pergunta
Eu quero fazer uma consulta para gatos de lista que levou mais tempo do que os gatos médio de venda? Eu tenho cinco tabelas:
Animal, Venda, AnimalOrderItem, AnimalOrder e SaleAnimal
mesa Animal: AnimalID, Nome, Categoria (Cão, gato, peixe)
SaleAnimal tabela: SaleID, AnimalID, SalePrice
mesa de venda: SaleID, data, employeeID, Cliente
mesa AnimalOrderItem: OrderID, AnimalID, o custo
AnimalOrder: CódigoDaEncomenda, DataDaEncomenda, Data de recebimento, SupplierID, shippingcost, EmployeeID
Há outras tabelas Eu não acho que eles têm um efeito sobre a consulta.
Eu pensei da seguinte ... fazer uma consulta para dias calcular a vender por todo ex:.
[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
Criar outra consulta com base na consulta acima
SELECT AnimalID, Name, Category, DaysToSell
WHERE Category="Cat" AND DaysToSell>
(SELECT Avg(DaysToSell)
FROM the earlier query
WHERE Category="Cat"
ORDER BY DaysToSell DESC;
Depois de executar a consulta que eu tenho de erro dizendo
ORA-00921: fim inesperado de SQL comando
Todas as sugestões! por favor
Solução
As consultas podem ser combinados com um subconsulta. Por exemplo,
select *
from (
select *
from mytable
) subquery
Aplicando este padrão para o seu problema parece bastante simples.
Outras dicas
Não vejo o suporte fechado que combina com a escolha avg
Ok, eu vim acima com este:
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;