sql按销售量为每个用户获得前三大订购量产品

fiei3ece  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(482)

我正在做一个学校项目的想法是一个销售啤酒的电子商务网站。
我需要得到的前三名最订购的产品,为每一个用户,已订购的东西。我的数据库包括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

数据库脚本:https://pastebin.com/bvqlgqur

iyr7buue

iyr7buue1#

为了限制返回的行只显示每个用户订购的前3个产品,您需要在order\u详细信息上使用带有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`;

相关问题