データベーススキーマは次のとおりです。
[編集済み]
以下のクエリで何をしているのかを説明します。
最も内側のクエリsaleId
:条件を満たすすべてのを選択しWHERE
ます
中央のクエリ:productId
の一部であったすべてのを選択しますsaleId
最も外側のクエリ:SUM
とproducts.cost
を選択しますvendors.name
。
そして、これが私が思いついたSQLクエリです:
SELECT vendors.name AS Company
, SUM(products.cost) AS Revenue
FROM
products
INNER JOIN sold_products
ON (products.productId = sold_products.productId)
INNER JOIN vendors
ON (products.vendorId = vendors.vendorId)
WHERE sold_products.productId IN (
SELECT sold_products.productId
FROM
sold_products
WHERE sold_products.saleId IN (
SELECT sales.saleId
FROM
markets
INNER JOIN vendors
ON (markets.vendorId = vendors.vendorId)
INNER JOIN sales_campaign
ON (sales_campaign.marketId = markets.marketId)
INNER JOIN packet_headers
ON (sales_campaign.packetHeaderId = packet_headers.packetHeaderId)
INNER JOIN packet_details
ON (packet_details.packetHeaderId = packet_headers.packetHeaderId)
INNER JOIN sales
ON (sales.packetDetailsId = packet_details.packetDetailsId)
WHERE vendors.customerId=60
)
)
GROUP BY Company
ORDER BY Revenue DESC;
これを最適化するのに何か助けはありますか?