首页 > 试题广场 >

查询出每个品牌在特定时间段内的退货率以及平均客户满意度评分

[编程题]查询出每个品牌在特定时间段内的退货率以及平均客户满意度评分
  • 热度指数:235 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
【背景】:电商平台需要深入分析不同品牌商品的退货情况和客户满意度,现在需要你根据下面三个数据表,查询出每个品牌在特定时间段内的退货率以及平均客户满意度评分。
【原始表】:
brand_info(品牌信息)表:
  • brand_id (品牌 ID): 品牌的唯一标识符
  • brand_name (品牌名称): 品牌的名称
  • category (类别): 品牌所属的商品类别

sales_orders(销售订单)表:
  • order_id (订单 ID): 订单的唯一标识符
  • brand_id (品牌 ID): 品牌的唯一标识符,用于关联品牌信息表中的品牌
  • order_date (订单日期): 下单日期
  • return_status (退货状态): 布尔值,1 表示退货,0 表示未退货

customer_feedback(客户反馈)表:
  • feedback_id (反馈 ID): 反馈的唯一标识符
  • order_id (订单 ID): 订单的唯一标识符,用于关联销售订单表中的订单
  • customer_satisfaction_score (客户满意度评分): 1 - 10 之间的整数评分,1 为最低,10 为最高

【要求】:根据上面这三个表格,按照品牌分组查询每个品牌在 2024 年 7 月的退货率(退货数量/总销售数量)以及平均客户满意度评分。查询出来的数据按照品牌 ID 升序排列。要求查询出来的表格的字段如下:
  • brand_id: 品牌 ID。
  • brand_name: 品牌名称。
  • return_rate_July_2024: 2024 年 7 月的退货率。round方式保留2位小数
  • average_customer_satisfaction_score: 平均客户满意度评分。round方式保留2位小数
【示例】
brand_info(品牌信息)表:
sales_orders(销售订单)表:
customer_feedback(客户反馈)表:
【按照要求查询出来的表】
【解释】
上述示例中Brand B有两笔订单分别是订单ID是3和4,一笔是6月份的,一笔是7月份,我们需要查询的是7月份的,所以只看Brand B 7月份的订单,退货率为0,评分是7
示例1

输入

DROP TABLE IF EXISTS brand_info;
DROP TABLE IF EXISTS sales_orders;
DROP TABLE IF EXISTS customer_feedback;
-- 创建表
CREATE TABLE brand_info (
    brand_id INT PRIMARY KEY,
    brand_name VARCHAR(50),
    category VARCHAR(50)
);

CREATE TABLE sales_orders (
    order_id INT PRIMARY KEY,
    brand_id INT,
    order_date DATE,
    return_status TINYINT(1)
);

CREATE TABLE customer_feedback (
    feedback_id INT PRIMARY KEY,
    order_id INT,
    customer_satisfaction_score INT
);

-- 插入数据
INSERT INTO brand_info (brand_id, brand_name, category)
VALUES (1, 'Brand A', 'Electronics'),
       (2, 'Brand B', 'Clothing');

INSERT INTO sales_orders (order_id, brand_id, order_date, return_status)
VALUES (1, 1, '2024-07-01', 0),
       (2, 1, '2024-07-05', 1),
       (3, 2, '2024-07-10', 0),
       (4, 2, '2024-06-10', 1);

INSERT INTO customer_feedback (feedback_id, order_id, customer_satisfaction_score)
VALUES (1, 1, 8),
       (2, 2, 3),
       (3, 3, 7),
       (4, 4, 8);

select * from brand_info;
select * from sales_orders;
select * from customer_feedback;

输出

brand_id|brand_name|return_rate_July_2024|average_customer_satisfaction_score
1|Brand A|0.50|5.50
2|Brand B|0.00|7.00
select brand_id,brand_name,round(sum(if(return_status=1,1,0))/count(*),2)  return_rate_July_2024,round(sum(customer_satisfaction_score)/count(*),2)  average_customer_satisfaction_score
from sales_orders s
left join brand_info b
using(brand_id)
left join customer_feedback c
using(order_id)
where order_date between "2024-7-1" and "2024-7-31"
group by brand_id,brand_name
order by brand_id
发表于 今天 11:02:04 回复(0)

select
    brand_id, brand_name,
    round(return_num / order_num, 2) as return_rate_July_2024,
    round(average_customer_satisfaction_score, 2) as average_customer_satisfaction_score
from (
    select
        b.brand_id,
        b.brand_name,
        count(*) as order_num,
        sum(if(return_status=1, 1, 0)) as return_num,
        avg(customer_satisfaction_score) as average_customer_satisfaction_score
    from sales_orders s left join brand_info b on s.brand_id=b.brand_id
                        left join customer_feedback c on s.order_id=c.order_id
    where order_date between '2024-07-01' and '2024-07-31'
    group by
        b.brand_id,
        b.brand_name
) t
order by brand_id asc

发表于 2025-06-28 23:12:47 回复(0)
SELECT 
    b.brand_id,
    b.brand_name,
    ROUND(SUM(s.return_status) / NULLIF(COUNT(s.return_status), 0),  2) AS return_rate_July_2024,
    ROUND(AVG(c.customer_satisfaction_score), 2) AS average_customer_satisfaction_score

FROM sales_orders AS s
LEFT JOIN brand_info AS b ON s.brand_id = b.brand_id
LEFT JOIN customer_feedback AS c ON s.order_id = c.order_id

WHERE  DATE_FORMAT(s.order_date, '%Y-%m') = '2024-07'
  
GROUP BY b.brand_id, b.brand_name
ORDER BY b.brand_id;

发表于 2025-06-25 22:46:13 回复(0)
select s.brand_id, brand_name, round((sum(return_status)/ count(*)),2) as return_rate_July_2024,
round(avg(customer_satisfaction_score),2) as average_customer_satisfaction_score
from sales_orders s left join brand_info b
on s.brand_id = b.brand_id
left join customer_feedback c
on s.order_id = c.order_id
where substring(order_date,1,7) = "2024-07"
group by brand_id, brand_name
order by brand_id
发表于 2025-06-21 09:47:14 回复(0)