数据科学中10个常用的高级SQL查询方法

图片

作为一名数据分析师或数据科学家,熟练掌握SQL对于操作数据库和提取数据库中的见解至关重要。虽然基本的SQL查询是必要的,但掌握高级SQL查询可以提升你的数据分析技能。在这里,我们将探讨每个数据分析师和数据科学家都应该熟悉的10个高级SQL查询,接下来开始深入了解吧!

图片

1. 子查询

子查询允许将一个查询嵌套在另一个查询中。它们对于根据另一个查询的结果执行复杂计算或过滤数据非常有用。例如:

-- 显示所有订单的订单编号和平均订单金额。
SELECT customer_id, (SELECT AVG(order_amount) FROM orders) AS average_order_amount
FROM customers;

-- 查找交易金额大于1000的客户。
SELECT customer_name
FROM customers
WHERE customer_id IN (SELECT customer_id FROM transactions WHERE amount > 1000);

-- 显示销售数量大于50的店铺编号和其销售数量。
SELECT stor_id, qty
FROM (SELECT stor_id, qty FROM sales WHERE qty > 50) AS temp_table;

2. UNION

UNION运算符从两个表中选择唯一(不同)的行。在两个表中,列的数量、列的顺序和列的数据类型都应相同。

-- 显示employees和departments表中UNIQUE的部门编号。
SELECT department_id
FROM employees
UNION
SELECT department_id
FROM departments;


-- 使用INNER JOIN显示employees和departments表中MATCHING的部门编号。
SELECT department_id
FROM employees
INNER JOIN departments
USING (department_id);

3. 连接(Join)

连接(Join)用于根据相关列将多个表的行合并在一起。通过不同类型的连接(内连接、左连接、右连接、全外连接),可以检索特定的数据关系。例如:

-- 选择员工的ID、全名和部门名称。显示employees和departments表中的共同记录。
SELECT employees.employee_id, employees.first_name, employees.last_name, departments.department_name
FROM employees
JOIN departments
ON employees.department_id = departments.department_id;

-- 或者,为简洁起见使用USING写法:
SELECT employee_id, first_name, last_name, department_name
FROM employees
JOIN departments
USING (department_id);

-- 选择员工的ID、全名和部门名称。显示employees表中的所有记录和departments表中匹配的记录。
SELECT employees.employee_id, employees.first_name, employees.last_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;

-- 或者,为简洁起见使用USING写法:
SELECT employee_id, first_name, last_name, department_name
FROM employees
LEFT JOIN departments
USING (department_id);

4. 窗口函数(Window Function)

窗口函数在与当前行相关的一组行上执行计算。它们对于计算累计总数、排名和其他汇总值非常有用。例如:

SELECT CustomerName, OrderDate, TotalAmount,
       SUM(TotalAmount) OVER (PARTITION BY CustomerName ORDER BY OrderDate) AS RunningTotal
FROM Orders;

5. 临时表(Temporary Table)

临时表是用于在会话中创建和使用存储中间结果的表。当你需要对数据子集执行多个操作时,它们非常有用。例如:

-- 创建一个名为'titles_publishers'的临时表。
CREATE TEMPORARY TABLE titles_publishers
SELECT title, country
FROM titles
LEFT JOIN publishers
USING (pub_id);

-- 从临时表'titles_publishers'中检索所有数据。
SELECT *
FROM titles_publishers;

6. 条件聚合(Conditional Aggregation)

条件聚合允许你根据特定条件有选择地应用聚合函数。当你想根据特定条件计算不同的聚合时,它非常有用。例如:

SELECT Category, COUNT(*) AS TotalProducts,
       SUM(CASE WHEN Price > 100 THEN 1 ELSE 0 END) AS ExpensiveProducts
FROM Products
GROUP BY Category;

7. 透视查询

数据透视查询将行转换为列,使你能够旋转数据以得到更好的分析和报告。当你想要在不同维度之间比较数据时,它们尤其有用。例如:

SELECT *
FROM (
    SELECT CustomerID, ProductID, Quantity
    FROM Orders
) AS SourceTable
PIVOT (
    SUM(Quantity)
    FOR ProductID IN ([1], [2], [3])
) AS PivotTable;

8. 字符串操作(String Manipulation)

SQL提供了各种字符串函数,用于操作和转换文本数据。像CONCATSUBSTRINGREPLACEUPPER/LOWER这样的函数可以用于对字符串执行操作。例如:

-- 将所有员工的全名选择为"employee_fullname"。
SELECT CONCAT(fname, " ", lname) AS employee_fullname
FROM employee;

-- 在地址字段中将St.更改为Street。
SELECT address, REPLACE(address, "St.", "Street") AS updated_address
FROM authors;

-- 选择所有书名的前10个字符。
SELECT SUBSTRING(title, 1, 10) AS short_title
FROM titles;

9. 通用表表达式(CTE)

通用表表达式(CTE)允许创建命名的临时结果集,可以在SELECTINSERTUPDATEDELETE语句中引用。它们对于将复杂查询拆分为更易管理的部分非常有用。例如:

-- 创建一个CTE来计算每个店铺的总销售额。
WITH StoreSales AS (
    SELECT stor_id, SUM(qty) AS total_sales
    FROM sales
    GROUP BY stor_id
)

-- 使用CTE来检索店铺信息和总销售额。
SELECT s.stor_name, ss.total_sales
FROM stores s
JOIN StoreSales ss
ON s.stor_id = ss.stor_id;

10. Case语句

通过Case语句,可以在SQL查询中执行条件逻辑。它们对于根据指定条件自定义查询结果非常有用。例如:

– 根据客户的总购买额将其分类为Gold、Silver或Bronze。-- 根据客户的总购买量将其分为、银卡或铜卡。

-- 根据客户的总购买额将其分类为Gold(金卡)、Silver(银卡)或Bronze(铜卡)。
SELECT customer_name,
       CASE
           WHEN total_purchases >= 10000 THEN 'Gold'
           WHEN total_purchases >= 5000 THEN 'Silver'
           ELSE 'Bronze'
       END AS customer_category
FROM customers;

结论

掌握高级SQL查询对于数据分析师和数据科学家处理复杂数据场景和提取有价值的见解至关重要。在上述内容中,我们介绍了10个必备的高级SQL查询,包括子查询、连接、窗口函数、CTE等。通过将这些技术纳入你的SQL技能库,你将能够很好地应对具有挑战性的数据分析任务,并做出数据驱动的决策。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python查询数据库的高级写法可以使用ORM(对象关系映射)框架,例如SQLAlchemy。ORM框架可以将数据的表映射为Python的类,并且提供了一系列的查询接口,方便开发者进行数据库操作。 下面是一个简单的示例代码,演示了使用SQLAlchemy查询数据库的方法: 首先,我们需要安装SQLAlchemy模块,可以使用pip命令进行安装: ``` pip install sqlalchemy ``` 然后,我们需要定义一个数据库表,并将其映射为Python的类: ``` from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base # 创建连接数据库的引擎 engine = create_engine('mysql+pymysql://username:password@host:port/database') # 创建基类 Base = declarative_base() # 定义User类,对应数据的user表 class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(50)) age = Column(Integer) def __repr__(self): return f'<User(name={self.name}, age={self.age})>' ``` 在这个示例,我们首先使用create_engine()方法创建一个连接数据库的引擎。然后使用declarative_base()方法创建一个基类Base,该基类继承自SQLAlchemy的基类,并且可以将数据的表映射为Python的类。最后我们定义了一个User类,它继承自Base类,并且对应数据的user表,其包括id、name和age三个属性。 接下来,我们可以使用SQLAlchemy提供的查询接口查询数据库: ``` from sqlalchemy.orm import sessionmaker # 创建Session类 Session = sessionmaker(bind=engine) # 创建Session对象 session = Session() # 查询所有用户 users = session.query(User).all() print(users) # 查询年龄大于等于18的用户 users = session.query(User).filter(User.age >= 18).all() print(users) # 查询姓名为Alice的用户 user = session.query(User).filter(User.name == 'Alice').first() print(user) ``` 在这个示例,我们首先使用sessionmaker()方法创建一个Session类,它可以创建Session对象。然后我们创建了一个Session对象,并使用query()方法查询数据的用户信息。其,all()方法表示查询所有用户,filter()方法可以根据条件进行筛选,first()方法表示查询第一个符合条件的用户。 这样,我们就可以方便地使用SQLAlchemy进行数据库操作,并且可以避免手写SQL语句的繁琐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值