Rumah > Soal Jawab > teks badan
P粉9519143812023-08-30 00:58:10
Saya dapat melihat arah yang anda cuba tuju dengan pertanyaan anda, tetapi malangnya ia tidak akan memberikan anda 10 keputusan teratas. Sebaliknya, anda mungkin tidak mendapat hasil sama sekali:
SELECT products.* FROM products WHERE products.id=[SELECT DISTINCT (products.id) ^^^ FROM orders WHERE customer.id=id->list(10)]
=
bermakna anda sedang mencari padanan yang tepat dan subkueri anda harus mengembalikan 10 baris data, jika anda menggunakan operasi ini, anda akan mendapat ralat ini.
Tetapi jika anda menukarnya kepada IN
, anda mungkin mendapat ralat ini
Berdasarkan percubaan semasa anda, pilihan anda adalah untuk membuatnya JOIN
. Walau bagaimanapun, saya tertanya-tanya bagaimana anda mendapat 10 teratas anda? Saya dapat lihat anda sedang mencari produk dalam 10 teratas, tetapi berdasarkan apa? Jumlah Jualan? Kuantiti pesanan?
Dalam pengertian ini, berikut ialah contoh 10 produk teratas yang disusun mengikut kuantiti pesanan.
SELECT P.* FROM Products P JOIN ( SELECT product_id FROM Orders GROUP BY product_id ORDER BY SUM(Qty) DESC LIMIT 10) O ON P.id=O.product_id;
Subkueri tidak perlu, tetapi saya meniru subkueri yang anda cuba, walaupun prosesnya tidak betul-betul sama. Berikut ialah versi tanpa subkueri:
SELECT P.* FROM Orders O JOIN Products P ON O.product_id=P.id GROUP BY product_id ORDER BY SUM(Qty) DESC LIMIT 10;
Atau mungkin anda sedang mencari 10 teratas yang disusun mengikut jumlah jualan?
SELECT P.* FROM Orders O JOIN Products P ON O.product_id=P.id GROUP BY product_id ORDER BY SUM(UnitPrice*Qty) DESC LIMIT 10;