题解 | 统计每个产品的销售情况(没有那么复杂吧老铁)

统计每个产品的销售情况

https://www.nowcoder.com/practice/d431aa7bf72c4fd7b048ec639bc83ad2

WITH t1 AS(
SELECT DISTINCT
    p.product_id,
    SUM(o.quantity * unit_price) total_sales,
    p.unit_price,
    SUM(o.quantity) total_quantity,
    ROUND(SUM(o.quantity * unit_price)/12, 2) avg_monthly_sales,
    MAX(quantity) max_monthly_quantity
FROM orders o
JOIN customers c ON c.customer_id = o.customer_id
JOIN products p ON p.product_id = o.product_id
GROUP BY p.product_id
)

SELECT
    t2.product_id,
    t2.total_sales,
    t2.unit_price,
    t2.total_quantity,
    t2.avg_monthly_sales,
    t2.max_monthly_quantity,
    CASE
    WHEN t2.customer_age BETWEEN 1 AND 10 THEN '1-10'
    WHEN t2.customer_age BETWEEN 11 AND 20 THEN '11-20'
    WHEN t2.customer_age BETWEEN 21 AND 30 THEN '21-30'
    WHEN t2.customer_age BETWEEN 31 AND 40 THEN '31-40'
    WHEN t2.customer_age BETWEEN 41 AND 50 THEN '41-50'
    WHEN t2.customer_age BETWEEN 51 AND 60 THEN '51-60'
    ELSE '61+' END customer_age_group
FROM(
    SELECT
        t1.product_id,
        t1.total_sales,
        t1.unit_price,
        t1.total_quantity,
        t1.avg_monthly_sales,
        t1.max_monthly_quantity,
        MIN(c.customer_age) customer_age
    FROM t1
    JOIN orders o ON t1.product_id = o.product_id AND o.quantity = t1.max_monthly_quantity
    JOIN customers c ON o.customer_id = c.customer_id
    GROUP BY t1.product_id
    ORDER BY t1.total_sales DESC, t1.product_id) t2

全部评论
MAX(quantity) max_monthly_quantity 这一行是不是应该分月统计?
4 回复 分享
发布于 04-05 11:40 湖南
drop table if exists customers ; drop table if exists products ; drop table if exists orders ; CREATE TABLE customers ( customer_id INT, customer_name VARCHAR(50), customer_email VARCHAR(50), customer_age INT, PRIMARY KEY (customer_id) ); INSERT INTO customers (customer_id, customer_name, customer_email, customer_age) VALUES (1, 'Alice', 'alice@example.com', 25), (2, 'Bob', 'bob@example.com', 30), (3, 'Charlie', 'charlie@example.com', 22), (4, 'David', 'david@example.com', 18), (5, 'Eve', 'eve@example.com', 35); CREATE TABLE products ( product_id INT, product_name VARCHAR(50), unit_price DECIMAL(10, 2), PRIMARY KEY (product_id) ); INSERT INTO products (product_id, product_name, unit_price) VALUES (101, 'Product A', 50.00), (102, 'Product B', 75.00), (103, 'Product C', 100.00), (104, 'Product D', 120.00), (105, 'Product E', 90.00); CREATE TABLE orders ( order_id INT, customer_id INT, product_id INT, quantity INT, order_date DATE, PRIMARY KEY (order_id) ); INSERT INTO orders (order_id, customer_id, product_id, quantity, order_date) VALUES (1, 1, 101, 2, '2023-01-15'), (2, 2, 102, 3, '2023-02-20'), (3, 3, 103, 1, '2023-03-10'), (4, 4, 104, 2, '2023-04-05'), (5, 5, 105, 4, '2023-05-12'), (6, 1, 102, 2, '2023-06-18'), (7, 2, 103, 3, '2023-07-22'), (8, 3, 104, 1, '2023-08-30'), (9, 4, 105, 2, '2023-09-14'), (10, 5, 101, 4, '2023-10-25'), (11, 1, 103, 2, '2023-11-08'), (12, 2, 104, 3, '2023-12-19'), (13, 3, 104, 1, '2023-12-20'); 给一组测试数据楼主,仅对样例的orders表格插入了一行数据(13, 3, 104, 1, '2023-12-20')
1 回复 分享
发布于 04-12 19:57 广西
评论区提出的问题已经修改完成,新答案:https://www.nowcoder.com/discuss/752581335327256576?sourceSSR=users
点赞 回复 分享
发布于 05-15 17:30 广东
同问
点赞 回复 分享
发布于 04-11 11:07 北京

相关推荐

程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
牛客nb666号:见天才的门槛罢了查看图片
点赞 评论 收藏
分享
评论
8
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务