📢 转载信息
原文链接:https://www.kdnuggets.com/sql-for-data-analysts-essential-queries-for-data-extraction-transformation
原文作者:Jayita Gulati

Image by Editor
数据分析师必备的SQL:数据提取与转换的核心查询
引言
数据分析师需要处理存储在数据库中的海量信息。在他们创建报告或发现洞察之前,必须首先提取正确的数据并准备投入使用。这就是 SQL(结构化查询语言)发挥作用的地方。SQL是一种帮助分析师检索数据、清理数据并将其组织成所需格式的工具。
在本文中,我们将探讨每位数据分析师都应该知道的最重要的SQL查询。
1. 使用 SELECT 选择数据
SELECT 语句是SQL的基础。你可以选择特定的列,或者使用 *
来返回所有可用字段。
SELECT name, age, salary FROM employees;
此查询仅从 employees
表中提取 name
、age
和 salary
列。
2. 使用 WHERE 过滤数据
WHERE 用于根据你的条件来缩小行范围。它支持比较运算符和逻辑运算符,以创建精确的过滤器。
SELECT * FROM employees WHERE department = 'Finance';
WHERE 子句仅返回属于财务部门的员工。
3. 使用 ORDER BY 排序结果
ORDER BY 子句按升序或降序对查询结果进行排序。它用于根据数字、文本或日期值对记录进行排名。
SELECT name, salary FROM employees ORDER BY salary DESC;
此查询按薪水降序排列员工,因此薪水最高的员工排在最前面。
4. 使用 DISTINCT 删除重复项
DISTINCT 关键字只返回列中的唯一值。当生成干净的类别或属性列表时,它非常有用。
SELECT DISTINCT department FROM employees;
DISTINCT 会删除重复的条目,每个部门名称只返回一次。
5. 使用 LIMIT 限制结果数量
LIMIT 子句限制查询返回的行数。它通常与 ORDER BY 结合使用,以显示顶级结果或从大型表中抽样数据。
SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 5;
通过将 ORDER BY 与 LIMIT 结合,此查询检索薪水最高的 5 位员工。
6. 使用 GROUP BY 聚合数据
GROUP BY 子句对在指定列中具有相同值的行进行分组。它与 SUM()
、AVG()
或 COUNT()
等聚合函数一起使用,以生成摘要。
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department;
GROUP BY 按部门组织行,AVG(salary)
计算每个组的平均薪水。
7. 使用 HAVING 过滤分组
HAVING 子句在应用聚合后过滤分组结果。当条件依赖于聚合值(如总数或平均值)时,使用它。
SELECT department, COUNT(*) AS num_employees FROM employees GROUP BY department HAVING COUNT(*) > 10;
该查询计算每个部门的员工人数,然后过滤掉员工人数少于 10 人的部门。
8. 使用 JOIN 合并表
JOIN 子句根据相关列合并两个或多个表中的行。它有助于检索连接的数据,例如具有其部门的员工信息。
SELECT e.name, d.name AS department FROM employees e JOIN departments d ON e.dept_id = d.id;
在这里,JOIN 将员工与其匹配的部门名称合并在一起。
9. 使用 UNION 合并结果
UNION 将两个或多个查询的结果合并到一个数据集中。它会自动删除重复项,除非你使用 UNION ALL
,后者会保留重复项。
SELECT name FROM employees UNION SELECT name FROM customers;
此查询将来自 employees
表和 customers
表的名称合并到一个列表中。
10. 字符串函数
SQL 中的字符串函数用于操作和转换文本数据。它们有助于完成合并姓名、更改大小写、修剪空格或提取字符串部分等任务。
SELECT CONCAT(first_name, ' ', last_name) AS full_name, LENGTH(first_name) AS name_length FROM employees;
此查询通过合并名字和姓氏来创建一个全名,并计算名字的长度。
11. 日期和时间函数
SQL 中的日期和时间函数允许你处理时间序列数据,用于分析和报告。它们可以计算差异、提取年或月等组件,以及通过加减时间间隔来调整日期。例如,使用 CURRENT_DATE
的 DATEDIFF()
可以衡量任期。
SELECT name, hire_date, DATEDIFF(CURRENT_DATE, hire_date) AS days_at_company FROM employees;
它通过从当前日期减去入职日期来计算每位员工在公司工作的天数。
12. 使用 CASE 创建新列
CASE 表达式创建带有条件逻辑的新列,类似于 if-else 语句。它允许你在查询中动态地对数据进行分类或转换。
SELECT name, CASE WHEN age < 30 THEN 'Junior' WHEN age BETWEEN 30 AND 50 THEN 'Mid-level' ELSE 'Senior' END AS experience_level FROM employees;
CASE 语句根据年龄范围创建一个名为 experience_level
的新列。
13. 使用 COALESCE 处理缺失值
COALESCE 通过返回列表中的第一个非空值来处理缺失值。它常用于将 NULL
字段替换为默认值,例如“N/A”。
SELECT name, COALESCE(phone, 'N/A') AS contact_number FROM customers;
在这里,COALESCE 将缺失的电话号码替换为“N/A”。
14. 子查询
子查询是嵌套在另一个查询中的查询,用于提供中间结果。它们用于 WHERE
、FROM
或 SELECT
子句中,以动态地过滤、比较或构建数据集。
SELECT name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
此查询通过使用嵌套的子查询,将每位员工的薪水与公司的平均薪水进行比较。
15. 窗口函数
窗口函数在一组行上执行计算,同时仍返回单独的行详细信息。它们常用于排名、运行总计和比较行之间的值。
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS salary_rank FROM employees;
RANK()
函数根据薪水为每位员工分配排名,而无需对行进行分组。
结论
掌握 SQL 是任何数据分析师最有价值的技能之一,因为它为提取、转换和解释数据提供了基础。从过滤和聚合到连接和重塑数据集,SQL 都能帮助分析师将原始信息转化为有意义的见解,从而推动决策制定。通过精通基本查询,分析师不仅可以简化工作流程,还可以确保分析的准确性和可扩展性。
Jayita Gulati 是一位热衷于构建机器学习模型的机器学习爱好者和技术作家。她拥有利物浦大学计算机科学硕士学位。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区