【数据库】谈谈group by

本文介绍了 SQL 中 Group By 语句的基本用法及其与多种聚合函数的结合使用,包括 COUNT、SUM、AVG 等,并通过具体示例展示了如何进行有效的数据分组和统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   前一段时间写SQL比较频繁,有时候想要用group by 来进行分组,却总是报错,今天就总结一下group by 的用法。

   group by 语句通常和合计函数一起使用,根据一个或多个列队结果集进行分组。

group by 语法


   现在我们对上面的数据进行操作:统计每一门课程选修的人数:

SELECT COUNT(name) AS number,course FROM `groupbytest` GROUP BY course
   查询结果如下:


   这就是最简单的group by的用法。

   而我之前是这样用的:

SELECT * FROM `groupbytest` GROUP BY course
SELECT NAME,course FROM `groupbytest` GROUP BY course
   在mysql中,可以查询到结果集,如下:

 
   跟原始数据对比,可以发现,查询到的结果集是每一门课程的第一条记录,这样就丢失了一部分数据。

   如果是在sql server中这么写是会直接报错的,大家感兴趣的话可以测试一下。

   其实group by函数是用来跟数据库的统计函数结合使用,对数据进行分组统计的。这个问题困扰了我好久,在网上看了一些介绍,自己又写了几条SQL才明白了他的用法。

   下面就为大家介绍一下group by的一些常用用法:

1.group by +多个列

SELECT name,sex,course FROM `groupbytest` GROUP BY sex,course
查询结果:


SELECT name,sex,course FROM `groupbytest` GROUP BY course,sex

   对比以上两条SQL查出来的结果集,可以看出,查询结果跟group by 后面的列的顺序是有关系的。第一条是先根据sex进行分组,再根据course分组,而第二条是先根据course分组,再根据sex分组。

2.group by 和count函数一起使用:对学生的性别进行统计。

SELECT COUNT(*) AS number,sex FROM `groupbytest` GROUP BY sex


3.group by 和sum函数一起使用:对分数进行汇总。


SELECT SUM(source) AS total,course FROM `groupbytest` GROUP BY course
查询结果:


4.group by 和avg函数一起使用:求每一门课程的平均值。

SELECT AVG(source) AS total,course FROM `groupbytest` GROUP BY course

5.group by和where一起使用:

SELECT COUNT(*),course FROM `groupbytest` WHERE sex = '男' GROUP BY course
结果集:


SELECT COUNT(*),course FROM `groupbytest` WHERE sex = '女' GROUP BY course
结果集:



   关于group by的用法还有很多,今天就先介绍到这里。还有我是在mysql的环境下做的一些例子,在SQL server中可能会有一些差异,到时候灵活应用就好了。希望能给大家带来帮助~


### 数据库 GROUP BY 的使用方法及示例 在 SQL 中,`GROUP BY` 是一个强大的工具,用于将数据按指定列分组,并对每个分组应用聚合函数。以下是关于 `GROUP BY` 的详细说明和一些实际示例。 #### 1. 基本语法 `GROUP BY` 的基本语法如下: ```sql SELECT column_name(s), AGGREGATE_FUNCTION(column_name) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s); ``` 其中,`AGGREGATE_FUNCTION` 可以是 `COUNT()`, `MAX()`, `MIN()`, `SUM()`, `AVG()` 等聚合函数[^1]。 #### 2. 示例:按单列分组 假设有一个名为 `orders` 的表,包含以下字段:`order_id`, `customer_id`, `amount`。如果需要统计每个客户的订单总数,可以使用以下查询: ```sql SELECT customer_id, COUNT(*) AS order_count FROM orders GROUP BY customer_id; ``` 此查询会返回每个客户的 ID 和其对应的订单数量。 #### 3. 示例:按多列分组 当需要按多个列进行分组时,可以在 `GROUP BY` 子句中列出多个列名。例如,统计每个用户的密码使用频率: ```sql SELECT userID, userPasswd, COUNT(*) AS count FROM user GROUP BY userPasswd, userID; ``` 此查询将返回每个用户及其对应密码的使用次数[^3]。 #### 4. 使用聚合函数 `GROUP BY` 通常与聚合函数结合使用。例如,计算每个客户订单的总金额: ```sql SELECT customer_id, SUM(amount) AS total_amount FROM orders GROUP BY customer_id; ``` 此查询会返回每个客户的 ID 和其所有订单的总金额[^1]。 #### 5. 窗口函数替代 GROUP BY 在某些数据库系统(如达梦数据库)中,可以使用窗口函数来替代 `GROUP BY`。例如,计算每个分组的计数: ```sql SELECT column1, column2, COUNT(*)
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值