原文标题 :10 SQL Queries You Should Know as a Data Scientist
作为数据科学家,你应该知道的 10 个 SQL 查询
通过示例在 5 分钟内了解最常用的 SQL 查询
Introduction
结构化查询语言或 SQL 是一种简单的基于查询的语言,易于阅读和编写。它是世界上最通用的语言之一。
在当今世界,我们都知道数据的重要性。在这篇文章中,我们将通过示例看到最常见的 SQL 查询。
本文的目的是向您展示数据科学中使用的基本和高级查询。
注意:所有查询都是用 PostgreSQL 编写的。
让我们开始吧!
1. Select All Columns
如果要选择表中所有可用的字段,请使用以下语法: * 帮助我们选择表中的所有列。
SELECT * FROM employees
2. Where Statement
我们可以使用 WHERE 子句,它根据给定的语句过滤数据。
示例:编写查询以打印 Sports Department 的所有变量。
SELECT * FROM employees
WHERE department = 'Sports'
3. Group by and Have 子句
Group By 子句将具有相同值的行分组。
示例:每个部门的总工资是多少?
SELECT SUM(salary) as total_salary,department
FROM employees
GROUP BY department
在 SQL 中,不能在 WHERE 子句中使用 SUM、AVG、MAX、MIN 和 COUNT 等聚合函数。如果我们想通过聚合函数过滤我们的表,我们需要使用 HAVING 子句。
示例:哪些部门的员工超过 50 人?
SELECT count(*) as total_employee,department
FROM employees
GROUP BY department
HAVING COUNT(*) > 50
4. Order By and Limit
示例:查找每个部门的总工资,并按总工资列降序排序。
请注意,别名可以按顺序使用。
SELECT SUM(salary) as total_salary,department FROM employees
GROUP BY department
ORDER BY total_salary desc
Limit 命令用于指定要返回的记录数。
示例:编写一个查询,查找前 5 名员工及其名字、部门和薪水,并按名字排序。
注意:默认 Order By 子句按 ASCENDING 顺序对结果进行排序。
SELECT first_name,department,salary from employees
ORDER BY first_name
LIMIT 5
5. Date Functions
在 PostgreSQL 中,您可以轻松地从日期列中提取值。您将在下面看到最常用的日期函数。
SELECT
date_part('year',hire_date) as year,
date_part('month',hire_date) as month,
date_part('day',hire_date) as day,
date_part('dow',hire_date) as dayofweek,
to_char(hire_date, 'Dy') as day_name,
to_char(hire_date,'Month') as month_name,
hire_date
FROM employees
6. 内连接、左连接或右连接
Inner Join 子句通过组合两个或多个表中具有匹配值的行来创建一个新表(非物理表)。
示例:查询所有员工信息及其所属部门。
注意:蓝色表是第一张表,绿色表是我们的第二张表。
SELECT * FROM employees e
INNER JOIN departments d
ON e.department = d.department
Left Join 返回左表中的所有行和右表中的匹配行。如果在右表中没有找到匹配的行,则使用 NULL。 (右连接反之亦然)
示例:编写一个查询,打印employee 中的所有部门并匹配department 表中的部门。
SELECT e.department,d.department FROM employees e
LEFT JOIN departments d
ON e.department = d.department
7. Subqueries
子查询是嵌套在更大查询中的 SQL 查询。
子查询可能发生在:
- a SELECT clause
- a FROM clause
- a WHERE clause
示例:查询每个员工的名字、部门和薪水以及给定的最高薪水。
SELECT first_name,department,salary,(SELECT max(salary) FROM employees)
FROM employees
8. Correlated Subqueries
相关子查询是读取表中每一行并将每一行中的值与相关数据进行比较的一种方法。每当子查询必须为主查询考虑的每个候选行返回不同的结果或结果集时,都会使用它。
示例:编写一个查询,按部门查找名字、薪水、部门和平均薪水。
SELECT first_name,salary,department,round((SELECT AVG(salary)
FROM employees e2
WHERE e1.department = e2.department
GROUP BY department )) as avg_salary_by_department
FROM employees e1
WHERE salary > (SELECT AVG(salary)
FROM employees e2
WHERE e1.department = e2.department
GROUP BY department )
ORDER BY salary
9. Case When Clause
CASE 语句用于实现您希望根据其他列中的值设置一列的值的逻辑。
它类似于 Excel 中的 IF-ELSE 语句。
示例:编写查询以打印名字、薪水和平均薪水,以及显示员工薪水是否高于平均薪水的新列。
SELECT first_name,salary,(SELECT ROUND(AVG(salary)) FROM employees) as average_salary,
(CASE WHEN salary > (SELECT AVG(salary) FROM employees) THEN 'higher_than_average'
ELSE 'lower_than_average' END) as Salary_Case
FROM employees
10. Window Functions
窗口函数在特定窗口(行集)上应用聚合和排名函数。 OVER 子句与窗口函数一起使用来定义该窗口。 OVER 子句做了两件事:
- 对行进行分区以形成行集(使用 PARTITION BY 子句)。
- 将这些分区中的行按特定顺序排序(使用 ORDER BY 子句)。
应用于特定窗口(行集)的各种聚合函数,例如 SUM()、COUNT()、AVERAGE()、MAX() 和 MIN(),称为聚合窗口函数。
10.1. Aggregation Examples
以下查询将为您提供每个部门的平均工资。
SELECT first_name,salary,department,
ROUND(AVG(salary) OVER(PARTITION BY department)) as avg_sales_by_dept
FROM employees
ORDER BY salary DESC
10.2.Ranking the Values
Rank() 函数是一个窗口函数,它为结果集分区内的每一行分配一个排名。
以下示例按薪水(降序)对表进行排序。排名值 1 是最高薪水值。
SELECT first_name,salary,RANK() OVER(ORDER BY salary DESC)
FROM employees
这些是数据专业人员常用的查询。
希望对您有所帮助!谢谢阅读!
关注我获取更多与数据科学相关的帖子![0]
让我们在 Linkedin 上联系吧![0]
不知道读什么?我为您选择了使用 Python 进行完整的探索性数据分析![0]
文章出处登录后可见!