group by及相关拓展

本文讲述了SQL中的GROUPBY功能,包括其与WHERE和HAVING子句的配合,Oracle和MySQL之间的区别,以及SQL语句的执行顺序。强调了在不同数据库系统中正确使用GROUPBY的关键性。
摘要由CSDN通过智能技术生成

这两天嘎嘎写sql啊,然后嘎嘎载跟头,特别是那个group by,谁让咱没正儿八经实践过oracle呢,参考链接在末尾哈

group by

分组函数,对by后面的字段进行一个分组,即后面一个字段就按照该字段分组,两个字段就把两个字段当成一组进行分组,查询出来的数据不会重复(自带去重效果,但是论执行时间还是distinct函数更加快速)

是和聚合函数搭配的

当在一个SQL中同时使用where和group by和having子句时,其执行顺序为:where>group by>having。

同时where子句作用于表或者视图,having子句作用于组,having子句必须作用在group by之后。

而group by子句必须放在where子句之前

一般情况下where,group by,having三者并不会连用,而是group by和另两个进行一个搭配,因为

group by子句用于分组数据,where子句用于筛选行级数据,而having子句用于筛选分组数据

oracle和mysql在该函数上的区别

select * from table group by id;

这条sql语句可以用在mysql中而无法用在oracle中,因为**select子句后的任一非聚合函数字段都应来源于group by 分组语句后,否则语法会编译不通过。**简单点理解就是没有使用聚合函数的列都得出现在group by之后。问就是今天在这里猛猛栽跟头

拓展

where

条件查询,后跟筛选条件,筛选条件可以分为以下三类:

  1. 按条件表达式筛选,>,=这些条件运算符
  2. 按照逻辑表达式筛选,and,or这些逻辑运算符
  3. 模糊查询,like,in这些模糊查询关键字

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

having

在oracle中一定要结合group by使用,在mysql中没有强制要求一定

having函数后面可以接聚合条件参数,也就是聚合函数+一些运算符和字段,用来弥补where语句不能搭配聚合函数的缺陷

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

sql语句执行顺序

这个就很重要了,毕竟是写sql逻辑顺序的一个关键点

  1. from子句:从数据库中选择要查询的表,并进行必要的连接操作。

  2. join子句:如果在 from子句中使用了连接操作(如 inner join、left join等),则执行连接操作并获取匹配的行。

  3. where子句:根据指定的条件筛选行级数据。

  4. group by子句:按照指定的列进行分组。

  5. having子句:对分组后的结果进行筛选。

  6. select子句:选择要返回的列或表达式。

  7. distinct:如果有使用distinct关键字,则对结果进行去重操作,保留唯一值。

  8. order by子句:按照指定的列对结果进行排序。

  9. limit(或类似的操作):如果有使用限制或分页等操作,根据指定的条件限制结果集的大小。

  10. offset(或类似的操作):如果有使用偏移量操作,跳过指定数量的结果行。

    我这边比较简短,想要更详细的可以参考这个链接(图解 SQL 执行顺序,通俗易懂! (qq.com)),并且人家带图,更加容易理解,我的这个主要好记

参考链接

Oracle分组查询group by的用法及讲解 (baidu.com)

oracle group by 的各种用法_M_Jack的博客-CSDN博客

一文讲懂SQL条件子句WHERE - 知乎 (zhihu.com)

SQL的having函数用法以及与where函数的区别_sql对查询结果进行条件限制having_小白修炼晋级中的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`groupby` 是 Pandas 库中用于对数据集按照某个特定字段进行分组的关键函数。这非常有用,尤其是在处理大型数据集时,你需要按某些条件进行聚合、筛选或者统计数据等操作。 假设我们有一个名为 `df` 的 DataFrame,并且想要基于某一列(例如 `'category'` 列)对数据进行分组,然后计算另一列(例如 `'value'` 列)的不同值的数量。这里是一种典型的做法: ```python import pandas as pd # 示例 DataFrame data = { 'category': ['A', 'B', 'A', 'B', 'A', 'B'], 'value': [10, 20, 15, 25, 10, 20] } df = pd.DataFrame(data) # 使用 groupby 进行分组并应用 count 函数统计每一组的 'value' 列的不同值数量 result = df.groupby('category')['value'].nunique() print(result) ``` 在这个例子中: 1. 我们首先导入了 pandas 库,并创建了一个简单的 DataFrame `df`,包含两列:`category` 和 `value`。 2. 接下来,通过 `groupby('category')` 对数据进行分组,表示我们需要按 `category` 列来进行分组。 3. 然后,使用 `.nunique()` 函数来统计每组内的唯一 `value` 数量。 4. 最后,打印出结果。 运行上述代码后,你会看到如下的输出,显示了每个分类下的唯一 `value` 数量: ``` category A 2 B 2 Name: value, dtype: int64 ``` 这意味着对于类别 A 和 B 分别有 2 种不同的 `value` 数据点。 ### 相关问题 - 细节与拓展: 1. **如何处理分组后数据为空的情况**:在实际应用中,如果某个分组下没有任何数据记录,那么`.nunique()`可能会返回 NaN 或者错误信息。你可以通过添加 `.fillna(0)` 或 `.dropna(how='all')` 来处理这种情况。 ```python result.fillna(0).astype(int) # 将 NaN 替换为 0 并转换为整数类型 ``` 2. **能否同时统计多个列的分组情况**:当然可以,只需要将多个列名传递给 `.nunique()` 即可。这可以帮助你更全面地了解不同组合的数据特性。 ```python result_multi = df.groupby('category')[['value', 'another_column']].nunique() ``` 3. **分组统计后的排序**:如果你需要按照某列的统计结果进行排序,可以使用 `.sort_values()` 函数。 ```python sorted_result = result.sort_values(ascending=False) ``` 以上是关于如何使用 `pandas` 中的 `groupby` 功能对数据进行分组以及后续进行统计分析的基本步骤和一些常见拓展技巧。希望这对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值