私は 4 つのテーブルを持つ小さなデータベースを持っています: Customer - Order - OrderLine - Product、私はクエリで少し遊んでいて、最も高価な注文を持つ人々の名前を取得しようとしています。
いろいろ試した後、すべての注文の価格を表示する次のクエリを思いつきました。
SELECT SUM(OrderLine.Amount * Product.Price) AS OrderLinePrice, Orders.Id, Customer.Lastname
FROM OrderLine, Product, Orders, Customer
WHERE OrderLine.ProductId = Product.Id
AND Orders.Id = OrderLine.OrderId
AND Customer.Id = Orders.CustomerId
GROUP BY Orders.Id, Customer.Lastname
ORDER BY OrderLinePrice DESC
今、私が概念的に行う必要がある、または行う必要があると考えているのは、MAX() を適用して最高の OrderLinePrice のみを選択することですが、式で集計関数を実行できないと文句を言う SQL Server では成功していません。集計が含まれています...
=============== アップデート:
現在、私のクエリは次のようになります。
SELECT t.CustomerLastName
FROM (
SELECT SUM(OrderLine.Amount * Product.Price) AS OrderLinePrice, Orders.Id, Customer.Lastname AS CustomerLastName
FROM OrderLine, Product, Orders, Customer
WHERE OrderLine.ProductId = Product.Id
AND Orders.Id = OrderLine.OrderId
AND Customer.Id = Orders.CustomerId
GROUP BY Orders.Id, Customer.Lastname
) AS t
WHERE t.OrderLinePrice =
(
SELECT MAX(s.OrderLinePrice) AS MaxOrderPrice
FROM (
SELECT SUM(OrderLine.Amount * Product.Price) AS OrderLinePrice, Orders.Id, Customer.Lastname AS CustomerLastName
FROM OrderLine, Product, Orders, Customer
WHERE OrderLine.ProductId = Product.Id
AND Orders.Id = OrderLine.OrderId
AND Customer.Id = Orders.CustomerId
GROUP BY Orders.Id, Customer.Lastname
) AS s
)
ORDER BY CustomerLastName
これは、注文の価格が最も高価な注文の価格と等しい顧客のリストを取得します。これは私が望むものを正確に取得しますが、恐ろしく冗長に感じます.
これをより効率的にするにはどうすればよいですか (可能であれば)。