Heim  >  Fragen und Antworten  >  Hauptteil

Der umgeschriebene Titel lautet: Erhalten Sie die von den ersten 10 Kunden gekauften Produkte

<p>Ich möchte eine SQL-Abfrage in Laravel/PHP schreiben, um die 10 verschiedenen Produkte zu erhalten, die von Kunden am häufigsten gekauft wurden. </p> <p>Meine Tabellenstruktur ist wie folgt:</p> <ul> <li><code>Bestellungen</code>Tabelle (Kunden-ID, Produkt-ID usw.)</li> <li><code>Produkte</code>Tabelle (Produkt-ID, Produktname usw.)</li> </ul> <p>Dies ist mein Abfrageversuch: </p> <pre class="brush:php;toolbar:false;">Produkte AUSWÄHLEN.* VON Produkten WHERE products.id = [SELECT DISTINCT (products.id) VON Bestellungen WHERE customer.id=id->list(10)]</pre></p>
P粉386318086P粉386318086417 Tage vor444

Antworte allen(1)Ich werde antworten

  • 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

    Antwort
    0
  • StornierenAntwort