重写后的标题为:获取前10个顾客购买的产品
P粉386318086
P粉386318086 2023-08-29 21:31:29
0
1
465
<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粉386318086
P粉386318086

全部回复(1)
P粉951914381

我可以看出你尝试的查询方向,但不幸的是这不会给你前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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!