引言
数据分析师需要处理存储在数据库中的大量信息。在创建报告或发现洞察之前,他们必须首先提取正确的数据并为其使用做好准备。这就是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子句仅返回属于Finance部门的员工。
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;
此查询将员工和客户表中的名称组合成一个列表。
10. 字符串函数
SQL中的字符串函数用于操作和转换文本数据。它们有助于完成诸如组合名称、更改大小写、修剪空格或提取部分字符串等任务。
SELECT CONCAT(first_name, ' ', last_name) AS full_name, LENGTH(first_name) AS name_length FROM employees;
此查询通过组合名字和姓氏创建全名,并计算名字的长度。
11. 日期和时间函数
SQL中的日期和时间函数让您可以处理时间数据以进行分析和报告。它们可以计算差异、提取组件(如年份或月份)以及通过添加或减去间隔来调整日期。例如,DATEDIFF()与CURRENT_DATE可以测量任期。
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使分析师能够将原始信息转化为推动决策的有意义洞察。通过熟练掌握基本查询,分析师不仅可以简化工作流程,还可以确保分析的准确性和可扩展性。