"小王,我需要上周所有产品的总销售额、平均销量和最高单日销量,下班前给我!" 销售总监又丢来一个紧急任务。😫
小王盯着电脑屏幕上的销售数据表,里面有"线上销售额"、"线下销售额"、"批发销售额"三列数据。"难道要导出到Excel一个个算吗?"他心想,只要掌握SQL中的聚合函数和多列求和技巧,这种需求分分钟就能搞定!💪
在深入多列求和之前,我们先快速回顾下SQL中最常用的5个聚合函数:
SUM() - 计算总和 ➕
SELECT SUM(sales) AS total_sales FROM products;
AVG() - 计算平均值 🔢
SELECT AVG(price) AS avg_price FROM products;
COUNT() - 计数 🔢
SELECT COUNT(*) AS product_count FROM products;
MAX() - 最大值 ⬆️
SELECT MAX(price) AS max_price FROM products;
MIN() - 最小值 ⬇️
SELECT MIN(price) AS min_price FROM products;
这些函数单独使用时很简单,但当需要对多列同时计算时,很多新手就会犯难了,别担心,下面就是干货时间!🎯
最简单的多列求和方式就是直接在SELECT语句中将列相加:
SELECT product_name, (online_sales + offline_sales + wholesale_sales) AS total_sales FROM sales_data;
💡 小贴士:如果有NULL值,结果会变成NULL,可以用COALESCE处理:
(COALESCE(online_sales,0) + COALESCE(offline_sales,0) + COALESCE(wholesale_sales,0))
对于需要分组统计的情况,可以这样写:
SELECT region, SUM(online_sales + offline_sales + wholesale_sales) AS region_total FROM sales_data GROUP BY region;
有时我们需要同时看到各列的汇总和总和:
SELECT SUM(online_sales) AS total_online, SUM(offline_sales) AS total_offline, SUM(wholesale_sales) AS total_wholesale, SUM(online_sales + offline_sales + wholesale_sales) AS grand_total FROM sales_data;
使用CASE WHEN实现条件统计:
SELECT product_type, SUM(CASE WHEN quarter = 'Q1' THEN online_sales ELSE 0 END) AS q1_online, SUM(CASE WHEN quarter = 'Q2' THEN online_sales ELSE 0 END) AS q2_online, SUM(online_sales) AS total_online FROM sales_data GROUP BY product_type;
SELECT EXTRACT(YEAR FROM sale_date) AS year, SUM(online_sales) AS online, SUM(offline_sales) AS offline, SUM(online_sales + offline_sales) AS total, ROUND(AVG(online_sales), 2) AS avg_online FROM sales_data GROUP BY EXTRACT(YEAR FROM sale_date) ORDER BY year;
SELECT region, product_category, SUM(sales_amount) AS total_sales FROM sales_data GROUP BY ROLLUP(region, product_category);
这会生成按地区、产品类别分组的小计,以及所有地区的总计。📈
假设我们有一个销售数据表sales_records
,包含以下字段:
需求1:计算每个产品各渠道销售总和及总销售额
SELECT product_id, SUM(online_sales) AS total_online, SUM(store_sales) AS total_store, SUM(wholesale_sales) AS total_wholesale, SUM(online_sales + store_sales + wholesale_sales) AS total_sales FROM sales_records GROUP BY product_id ORDER BY total_sales DESC;
需求2:按地区统计季度销售情况
SELECT region, EXTRACT(QUARTER FROM sale_date) AS quarter, SUM(online_sales) AS online, SUM(store_sales) AS store, SUM(wholesale_sales) AS wholesale, SUM(online_sales + store_sales + wholesale_sales) AS total, ROUND(100.0 * SUM(online_sales) / NULLIF(SUM(online_sales + store_sales + wholesale_sales), 0), 2) AS online_percentage FROM sales_records GROUP BY region, EXTRACT(QUARTER FROM sale_date) ORDER BY region, quarter;
❓ 问题1:多列求和时遇到NULL值怎么办? ✅ 解决方法:使用COALESCE或ISNULL函数将NULL转为0
SUM(COALESCE(column1,0) + COALESCE(column2,0))
❓ 问题2:如何优化大量数据的多列聚合查询? ✅ 解决建议:
❔ 问题3:能在聚合函数中使用聚合结果吗? ✅ 可以,但需要使用子查询或CTE:
WITH sales_summary AS ( SELECT product_id, SUM(sales) AS total_sales FROM sales_data GROUP BY product_id ) SELECT AVG(total_sales) AS avg_product_sales FROM sales_summary;
掌握多列求和方法,你就能轻松应对各种复杂的数据汇总需求!🎉 记住这些关键点:
下次再遇到"多列数据汇总"的需求,相信你一定能快速搞定!💻 如果觉得有用,不妨在实际工作中多练习这些技巧,熟能生巧哦!✨ 基于2025年7月前的数据库技术最佳实践)
本文由 隽娟巧 于2025-07-31发表在【云服务器提供商】,文中图片由(隽娟巧)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/499142.html
发表评论