数据分析必备的10个SQL命令

2025年01月15日 由 佚名 发表 201 0

10 Essential SQL Commands for Data Analysis
作者图片 | Canva

 

SQL有时看起来像是一种普通的语言,但它的能力远比人们想象的要强大。

在关于数据分析必备SQL命令的文章中,我无法避免谈论那些绝对必要的命令。你可以在SQL速查表中找到我提到的许多命令的更多细节。

但要增加一些趣味性,并提到一些不太常见但在数据分析中会有用的命令。

 

必备命令

 
即使是最基本的SQL数据分析也离不开这些命令中的至少一些,通常甚至是全部。

它们如此重要,我们甚至可以称之为10条诫命。

 
Essential SQL Commands For Data Analysis

 

1. SELECT

 
没有SELECT,你无法进行任何类似数据分析的操作,因为首先你需要获取数据,这就是SELECT的目的:从一个或多个表中检索数据。

这个示例查询从员工表中检索特定列(first_namelast_namesalary)。它演示了SELECT的基本数据检索功能。

SELECT first_name, last_name, salary FROM employees WHERE department = 'Sales';

 

2. WHERE

 
WHERE子句用于过滤数据,允许你缩小数据集的范围。

这个示例过滤产品,只显示类别为1且单价大于50的产品。WHERE子句允许使用AND/OR运算符进行多个条件的组合。

SELECT product_name, unit_price FROM products WHERE category_id = 1 AND unit_price > 50;

 

3. GROUP BY

 
GROUP BY子句根据列中的相同值将数据组织成组。这样,你可以更容易地总结大量数据。

这个示例按部门对员工进行分组,并计算每个部门的员工数量和平均工资。GROUP BY对于在不同层次上聚合数据是必不可少的。

SELECT department, COUNT(*) as employee_count, AVG(salary) as avg_salary FROM employees GROUP BY department;

 

4. HAVING

 
这是SQL中用于过滤数据的另一个子句。HAVING在聚合之后过滤数据,因此允许在子句中使用聚合函数,这与WHERE不同。

这个示例仅显示产品数量超过10的类别。HAVING过滤分组结果,与WHERE不同,它可以使用聚合函数。

SELECT category, COUNT(*) as product_count FROM products GROUP BY category HAVING COUNT(*) > 10;

 

5. JOIN

 
JOIN子句允许你将来自两个或多个表的数据结合起来。数据库逻辑要求数据库规范化,这意味着你通常不会在一个表中找到所有需要的数据。如果你不想被限制在一个表的范围内,JOIN是很重要的,它可以避免所谓的‘阿尔卡特拉兹数据分析’。(我刚刚编的。)

这个示例通过匹配客户ID将订单信息与客户详细信息结合起来。JOIN连接来自多个表的相关数据。

SELECT o.order_id, c.customer_name, o.order_date FROM orders o JOIN customers c ON o.customer_id = c.customer_id;

 

6. ORDER BY

 
如果你不想依赖SQL的输出逻辑(实际上是逻辑,但说成是心血来潮更戏剧化),请使用ORDER BY。它是一个用于按一个或多个列对结果集进行排序的子句。排序可以是升序(文本数据按字母顺序;数字数据从小到大;日期从旧到新)或降序(文本数据按反字母顺序;数字数据从大到小;日期从新到旧)。

以下示例按价格降序排序产品,然后按名称字母顺序排序。ORDER BY可以按多个列以不同的方向排序。

SELECT product_name, unit_price FROM products ORDER BY unit_price DESC, product_name ASC;

 

7. LIMIT

 
LIMIT子句在你想限制查询返回的行数时很有用。

这个示例显示按销售单位排序的前5个产品。LIMIT将输出限制为特定数量的行,适用于前N项分析。

SELECT product_name, units_sold FROM sales ORDER BY units_sold DESC LIMIT 5;

 

8. CASE

 
CASE语句是SQL中if-else逻辑的实现。通过它,你可以动态分组数据(基于条件),标记数据,并派生新列。

这个示例使用条件逻辑将产品分类为不同的价格范围。CASE允许根据条件动态分类数据。

SELECT product_name,       CASE            WHEN unit_price < 20 THEN '预算'           WHEN unit_price < 50 THEN '中档'           ELSE '高档'       END as price_categoryFROM products;

 

9. DISTINCT

 
在数据分析中,去除重复项是常见问题之一,而DISTINCT优雅地解决了这个问题:它只检索唯一值。

以下示例显示类别和供应商的唯一组合。DISTINCT从结果集中消除重复行。

SELECT DISTINCT category, supplier_id FROM products ORDER BY category;

 

10. UNION

 
UNION和UNION ALL运算符将两个或多个SELECT语句的结果合并为一个结果。它们之间的区别在于UNION会去除重复项(出现在所有查询输出中的行),而UNION ALL则包含所有行。

这个示例将活跃和停产产品列表合并为一个结果集。UNION合并多个SELECT语句的结果,同时去除重复项。

SELECT product_id, product_name, '活跃' as status FROM current_productsUNIONSELECT product_id, product_name, '停产' FROM discontinued_products;

 

不那么重要(但仍然非常酷)的命令

 
现在,让我们提到一些可能经常被忽视但可以为SQL数据分析增加更多灵活性的其他命令。

 
Commands For Adding Versatility to Data Analysis in SQL
 

  1. WITH(公用表表达式或CTE):用于定义一个临时结果集(类似于临时表或命名子查询),可以在另一个查询中重用,并支持递归(遍历图和分析层次数据)
  2. JSON_EXTRACT:从JSON字符串中提取特定数据,允许你处理半结构化数据。
  3. 窗口函数:用于在与当前行相关的行子集上执行计算(用于排名、运行总计、移动平均等)
  4. PIVOT():用于创建数据透视表。
  5. COALESCE():确保NULL值被替换为默认值。
  6. STRING_AGG():将字符串组合成逗号分隔的列表。
  7. ARRAY_AGG():将数据分组为数组。
  8. EXCEPT:返回第一个查询中不存在于第二个查询中的行。

 

结论

 
我们列出的命令将在大多数数据分析中常用。它们执行不可避免的分析任务,如获取、过滤、分组和聚合数据。

将它们与这八个额外命令结合使用,你将轻松获得一个灵活的SQL数据分析工具。

    文章来源:https://www.kdnuggets.com/10-essential-sql-commands-data-analysis
    欢迎关注ATYUN官方公众号
    商务合作及内容投稿请联系邮箱:bd@atyun.com
    评论 登录
    写评论取消
    回复取消