MySQL数据分析:日常工作中的SQL查询
数据分析师日常工作中,90%的SQL查询都是基础操作。本文展示企业数据分析中最实用、最常用的MySQL查询,帮你快速掌握核心技能。
一、基础数据表设计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR (50 ), email VARCHAR (100 ), reg_date DATE , city VARCHAR (50 ) ); CREATE TABLE orders ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT , order_date DATE , amount DECIMAL (10 ,2 ), status VARCHAR (20 ) ); CREATE TABLE products ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR (200 ), category VARCHAR (100 ), price DECIMAL (10 ,2 ) );
二、最常用的5类查询 1. 数据统计(每天都要用) 1 2 3 4 5 6 7 8 9 10 11 SELECT COUNT (* ) FROM orders;SELECT SUM (amount) FROM orders;SELECT AVG (amount) FROM orders;SELECT MAX (amount), MIN (amount) FROM orders;
2. 分组分析(每周都要用) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SELECT order_date, COUNT (* ), SUM (amount)FROM ordersGROUP BY order_dateORDER BY order_date DESC ;SELECT category, COUNT (* ), SUM (price)FROM productsGROUP BY category;SELECT city, COUNT (* ) as user_countFROM usersGROUP BY cityORDER BY user_count DESC ;
3. 条件筛选(随时要用) 1 2 3 4 5 6 7 8 9 10 SELECT * FROM ordersWHERE amount > 1000 AND status = '已完成' AND order_date >= '2026-01-01' ; SELECT * FROM usersWHERE city = '北京' AND reg_date >= '2025-01-01' ;
4. 多表关联(经常要用) 1 2 3 4 5 6 7 8 9 10 SELECT u.name, u.email, o.order_date, o.amountFROM users uJOIN orders o ON u.id = o.user_idWHERE o.status = '已完成' ;SELECT o.id, p.name, p.price, o.amountFROM orders oJOIN products p ON o.product_id = p.id;
5. 排序和限制(展示数据用) 1 2 3 4 5 6 7 8 9 10 11 12 SELECT u.name, SUM (o.amount) as totalFROM users uJOIN orders o ON u.id = o.user_idGROUP BY u.id, u.nameORDER BY total DESC LIMIT 10 ; SELECT * FROM ordersWHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY )ORDER BY order_date DESC ;
三、实际业务场景 场景1:日报数据 1 2 3 4 5 6 7 SELECT COUNT (* ) as 订单数, SUM (amount) as 销售额, AVG (amount) as 平均订单额 FROM ordersWHERE DATE (order_date) = CURDATE();
场景2:用户分析 1 2 3 4 5 6 7 8 9 10 SELECT CASE WHEN reg_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY ) THEN '新用户' WHEN reg_date >= DATE_SUB(CURDATE(), INTERVAL 90 DAY ) THEN '活跃用户' ELSE '老用户' END as 用户类型, COUNT (* ) as 用户数 FROM usersGROUP BY 用户类型;
场景3:产品分析 1 2 3 4 5 6 7 8 9 10 11 SELECT p.name, p.category, COUNT (o.id) as 销量, SUM (o.amount) as 销售额 FROM products pJOIN orders o ON p.id = o.product_idGROUP BY p.id, p.name, p.categoryORDER BY 销售额 DESC LIMIT 20 ;
四、学习建议 1. 先掌握这些(就够用了):
SELECT, FROM, WHERE
GROUP BY, ORDER BY
COUNT, SUM, AVG, MAX, MIN
JOIN(INNER JOIN)
2. 每天练习:
在自己的测试库中创建表
插入一些测试数据
运行上面的查询
3. 理解业务:
每个查询要解决什么业务问题?
结果对业务有什么价值?
五、求职准备 面试常问:
“统计最近一个月每个城市的销售额”
“找出消费最高的10个用户”
“分析产品的销售趋势”
回答思路:
先说要用哪些表
再说查询逻辑
最后说业务意义
总结 记住:简单就是美。
复杂的查询不一定更好
能解决问题的查询就是好查询
先写出来,再慢慢优化
数据分析 = 业务理解 + SQL基础
最后更新: 2026-03-04 | 实战导向,拒绝复杂