Mysql SQL可按销售数量为每个用户获得前三名订购最多的产品

Mysql SQL可按销售数量为每个用户获得前三名订购最多的产品,mysql,sql,e-commerce,Mysql,Sql,E Commerce,我正在做一个学校项目,这个项目的想法是一个销售啤酒的电子商务网站 我需要为每一个订购过产品的个人用户获得前三名订购最多的产品。我的数据库包括4个表:用户、产品、订单和订单详情。图为: 我想我必须加入所有4个表才能获得这些信息,但我想不出正确的方法。以下是我生成的内容: SELECT u.username, p.`id` AS productId, p.`name`, od.`quantity` AS quantity FROM `order_detail` AS od INNER JO

我正在做一个学校项目,这个项目的想法是一个销售啤酒的电子商务网站

我需要为每一个订购过产品的个人用户获得前三名订购最多的产品。我的数据库包括4个表:用户、产品、订单和订单详情。图为:

我想我必须加入所有4个表才能获得这些信息,但我想不出正确的方法。以下是我生成的内容:

SELECT u.username, p.`id` AS productId, p.`name`, od.`quantity` AS quantity
FROM `order_detail` AS od
    INNER JOIN `products` AS p
    INNER JOIN `users` AS u
    ON od.`product_id` = p.`id`
GROUP BY od.`order_id`, p.name
ORDER BY od.`quantity` DESC, p.`name` ASC

数据库脚本:

为了限制返回的行,使其仅显示每个用户订购的前3种产品,您需要在订单详细信息上使用带有limit子句的子查询

除此之外,它只是4个表之间的简单连接

SELECT
    a.`user_name`,
    d.`id` as `product_id`,
    d.`name` as `product_name`,
    SUM(c1.`quantity`) as `total_quantity`,
    d.`price` as `product_price`,
    d.`price` * SUM(c1.`quantity`) as `total_spent`
FROM `users` a
JOIN `orders` b
    ON b.`user_id` = a.`id`
JOIN (SELECT c.`order_id`, c.`product_id`, SUM(c.`quantity`) as `num_ordered`
        FROM `order_detail` c
        ORDER BY `num_ordered` DESC
        LIMIT 3) as c1
    ON c1.`order_id` = b.`id`
JOIN `products` d
    ON d.`id` = c1.`product_id`
GROUP BY a.`id`,d.`product_id`
ORDER BY a.`user_name`,`total_quantity` DESC, d.`name`;

尝试以下操作:选择u.username、p.name、sumod.quantity作为订单数量\u详细信息作为od内部联接产品作为p内部联接用户作为od上的u.product\u id=p.id按u.username分组,p.name按od.quantity DESC订购,p.name作为粘贴箱的替代,您可能希望使用SQL FIDLE,因为很少有人愿意花费大量精力来阅读所有代码。它不起作用。我认为这并不能解决在db结构上运行查询后提出的问题,尽管查询中仍然存在一些错误。为什么?它将生成所有已订购产品的用户的列表,并按订单数量降序列出前三名产品。我认为他需要每个用户的前三名产品和累计前三名产品。查看提供的模式,您的查询会出现一些问题;1.a、 用户名应该是用户名2。别名C1上没有名为quantity的字段请尝试此选择b.用户id、a.用户名、b.产品名称、b.产品id、b.产品描述、b.订单数量用户a加入选择用户名、u.id为“用户id”、p.name为“产品名称”、p.description为“产品描述”、p.id为“产品id”、u.last\u名称、u.first\u名称、,SUMod.quantity作为“order\u quantity”从产品p左加入订单p.id上的详细od=od.product\u id左加入订单o在od上的订单o.order\u id=o.id左加入用户u在o.user\u id=u.id,其中产品id不为空按u.username分组,p.id按u.username订购,订单数量描述为a.id=b.user\u id;