计算每个部门中销售额最高的前N个产品,或者进一步分析这些产品的销售趋势。但在这里,我将给出一个稍微不同的例子,即计算每个部门中销售额占比超过特定阈值(比如10%)的产品列表,并显示它们的销售额和占比。
SQL 查询示例
WITH DepartmentTotalSales AS (
SELECT
d.department_id,
d.department_name,
SUM(s.sales_amount) AS total_sales
FROM
departments d
JOIN
sales s ON d.department_id = s.department_id
GROUP BY
d.department_id,
d.department_name
),
ProductSalesDetail AS (
SELECT
d.department_id,
d.department_name,
p.product_id,
p.product_name,
SUM(s.sales_amount) AS product_sales,
dts.total_sales,
ROUND((SUM(s.sales_amount) / dts.total_sales) * 100, 2) AS sales_percentage
FROM
sales s
JOIN
departments d ON s.department_id = d.department_id
JOIN
products p ON s.product_id = p.product_id
JOIN
DepartmentTotalSales dts ON d.department_id = dts.department_id
GROUP BY
d.department_id,
d.department_name,
p.product_id,
p.product_name,
dts.total_sales
)
SELECT
psd.department_name,
psd.product_name,
psd.product_sales,
psd.total_sales,
psd.sales_percentage
FROM
ProductSalesDetail psd
WHERE
psd.sales_percentage > 10 -- 筛选出销售额占比超过10%的产品
ORDER BY
psd.department_name,
psd.sales_percentage DESC;
解释
- CTE DepartmentTotalSales:
- 这个CTE与之前的相同,计算了每个部门的总销售额。
- CTE ProductSalesDetail:
- 在这个CTE中,我们计算了每个部门中每个产品的销售额,并计算了这些销售额占部门总销售额的百分比。
- 注意,这里的
SUM(s.sales_amount)
是在产品级别进行汇总的,以确保我们得到的是每个产品的总销售额。 - 我们再次加入了
DepartmentTotalSales
CTE来获取每个部门的总销售额。
- 主查询:
- 从
ProductSalesDetail
CTE中选择数据,但这次我们只关心那些销售额占比超过10%的产品。 - 结果按部门名称和销售额占比降序排序,以便首先看到占比最高的产品。
这个查询不仅提供了销售额占比的详细信息,还允许我们根据这个占比来筛选出重要的产品。这对于制定销售策略、优化产品组合或识别潜在的增长领域都非常有用。