Rumah  >  Soal Jawab  >  teks badan

Tajuk yang ditulis semula ialah: Dapatkan produk yang dibeli oleh 10 pelanggan pertama

<p>Saya ingin menulis pertanyaan SQL dalam laravel/php untuk mendapatkan 10 produk berbeza teratas yang dibeli oleh pelanggan. </p> <p>Struktur jadual saya adalah seperti berikut:</p> <ul> <li><kod>Pesanan</kod>Jadual (ID Pelanggan, ID Produk, dll...)</li> <li><kod>Produk</kod>Jadual (ID produk, nama produk, dll...)</li> </ul> <p>Ini ialah percubaan pertanyaan saya: </p> <pre class="brush:php;toolbar:false;">PILIH produk.* DARI produk WHERE products.id = [SELECT DISTINCT (products.id) DARIPADA pesanan WHERE customer.id=id->list(10)]</pre></p>
P粉386318086P粉386318086417 hari yang lalu450

membalas semua(1)saya akan balas

  • P粉951914381

    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;

    Demo biola

    balas
    0
  • Batalbalas