首頁  >  問答  >  主體

重寫後的標題為:取得前10位顧客購買的產品

<p>我想在laravel/php中寫一個SQL查詢,以獲得客戶購買的前10個不同的產品。 </p> <p>我的表格架構如下:</p> <ul> <li><code>Orders</code>表(客戶ID、產品ID等...)</li> <li><code>Products</code>表(產品ID、產品名稱等...)</li> </ul> <p>這是我的查詢嘗試:</p> <pre class="brush:php;toolbar:false;">SELECT products.* FROM products WHERE products.id = [SELECT DISTINCT (products.id) FROM orders WHERE customer.id=id->list(10)]</pre></p>
P粉386318086P粉386318086417 天前447

全部回覆(1)我來回復

  • P粉951914381

    P粉9519143812023-08-30 00:58:10

    我可以看出你嘗試的查詢方向,但不幸的是這不會給你前10個結果。相反,你可能根本不會得到任何結果:

    SELECT products.* 
     FROM products 
     WHERE products.id=[SELECT DISTINCT (products.id) 
                     ^^^   FROM orders 
                           WHERE customer.id=id->list(10)]

    =表示你正在尋找一個精確匹配,你的子查詢應該返回10個的數據,如果你使用這個操作,你將收到這個錯誤。

    但如果你將其改為IN,你可能會收到這個錯誤

    根據你目前的嘗試,你的選擇是進行一個JOIN。然而,我想知道你是如何得到你的前10個的?我可以看到你正在尋找產品的前10個,但基於什麼?銷售金額?訂購數量?

    在這個意義上,這是一個按訂購數量排序的前10個產品的範例。

    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;

    子查詢是不必要的,但我在模仿你嘗試的子查詢,雖然過程並不完全相同。這是沒有子查詢的版本:

    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;

    或者你可能正在尋找按銷售金額排序的前10個?

    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;

    示範fiddle

    #

    回覆
    0
  • 取消回覆