2
私のデータベースには、次のようになります。複雑なSQLクエリ
- お客様
Customer (c_id, c_name)
Products (p_id, p_name, p_cost)
Buys (p_id references Products, c_id references Customer)
は、私は次のデータベースを照会したいですw i最大製品数:同じ製品数の顧客が2人以上いる場合は、すべての製品の合計価格が考慮されます。
私は試してみましたが、「間違った構文近くに)」。
私はそれを何の利益も得ないようにデバッグしようとしています。
も、このクエリやデバッグ、誰もがより最適なクエリを提案することはできますか?
select a1.c_id, a1.c_name
from
(select c.c_id, c.c_name
from Customer c
where c.c_id in
(select b.c_id
from Buys b
group by b.c_id
having COUNT(b.p_id) >= all
(
select COUNT(b.p_id)
from Buys b
group by b.c_id
)
)
)
as a1
join
(select b.c_id, SUM(p.p_cost) as 'SumCost'
from Buys b
join Products p on b.p_id = p.p_id
group by b.c_id
) as a2 on a1.c_id = a2.c_id
where
a2.SumCost = (select MAX(SumCost)
from
(select b.c_id, SUM(p.p_cost) as 'SumCost'
from Buys b
join Products p on b.p_id = p.p_id
group by b.c_id
)
)
更新:
上記のクエリはmohdowaisにより、正常にデバッグされます。 このクエリは効率的ではないと私は考えています。もっと効率的なものをお勧めしますか? 私はインデックスを使用していません。
@ミッチ小麦:ありがとう。出来た。しかし、私はそれについてもっと知る必要があります。あなたはその "maxTmp"を少し詳しく説明できますか?あなたが選択した結果に別名を与えなければならない選択の結果から選択するとき – Kameron
: '(何とかから選択*)SELECT * FROMはミッチ小麦@ – Bohemian
をsomeAlias':marc_s @ – Kameron