超级简单理解group by

news/2024/7/9 21:00:43 标签: sql, 数据库, mysql, postgresql, mariadb

公司的实习生小伙子不理解group by,我就发表一下自己的拙见,顺便当作笔记,日后常加翻阅。

sql">记住下面三句话即可!
1、分组的作用就是为了做聚合,不聚合的分组有什么意义呢!
2、分组的select中“如果存在”字段,那么select中的字段必须和分组条件中的字段“完全一致”,否则查询出来的结果没有意义!
3、分组的聚合函数的参数可以是任何内容,不一定必须是分组条件中的字段!

-- 例子
mysql> select * from tb_user;
+----+------+--------+--------+
| id | name | gender | status |
+----+------+--------+--------+
|  1 | 张三 ||      1 |
|  2 | 李四 ||      1 |
|  3 | 王五 ||      0 |
|  4 | 赵六 ||      1 |
|  5 | 田七 ||      0 |
+----+------+--------+--------+

-- 查询结果没有意义
mysql> select * from tb_user group by gender;
+----+------+--------+--------+
| id | name | gender | status |
+----+------+--------+--------+
|  2 | 李四 ||      1 |
|  1 | 张三 ||      1 |
+----+------+--------+--------+

-- 这么写是有一点意义的。就是可以看出gender字段的取值有几种,意义不大。
mysql> select gender from tb_user group by gender;
+--------+
| gender |
+--------+
||
||
+--------+

-- 查询结果没有意义
mysql> select gender,status from tb_user group by gender,status;
+--------+--------+
| gender | status |
+--------+--------+
||      1 |
||      0 |
||      1 |
+--------+--------+

-- 分组和聚合函数配合才有意义,下面是典型的分组查询
mysql> select gender,count(1) from tb_user group by gender;
+--------+----------+
| gender | count(1) |
+--------+----------+
||        2 |
||        3 |
+--------+----------+

-- select中没有group by后面的字段,查询结果无意义
mysql> select `name` from tb_user group by gender;
+------+
| name |
+------+
| 李四 |
| 张三 |
+------+

-- 这尼玛还是没有意义
mysql> select `name`,gender from tb_user group by gender;
+------+--------+
| name | gender |
+------+--------+
| 李四 ||
| 张三 ||
+------+--------+

-- select后面如果有字段,就必须和group by后面的字段完全一致。下面不一致,查询结果没有意义。
-- 下面的count()函数的参数不用非得写为gender,因为count()计算的是每组的所有记录。
-- group by是将一个表拆分成多个表,聚合函数是将多条记录合并成一条结果集。因此分组之后count(),就计算出了每组一共多少条记录。
mysql> select `name`,gender,count(1) from tb_user group by gender;
+------+--------+----------+
| name | gender | count(1) |
+------+--------+----------+
| 李四 ||        2 |
| 张三 ||        3 |
+------+--------+----------+

-- 下面是一个典型的分组语句。
-- select后面“如果有”字段,那么必须和group by的字段“完全一致”。
-- 分组的聚合函数中可以写任何内容,就当作一张完整的小表来进行聚合即可。
-- 见下图。
mysql> select gender,count(1) from tb_user group by gender;
+--------+----------+
| gender | count(1) |
+--------+----------+
||        2 |
||        3 |
+--------+----------+

  • 一张图理解group by
    在这里插入图片描述

http://www.niftyadmin.cn/n/860770.html

相关文章

java服务启动脚本

mvn打包命令 # build.sh mvn clean package -Dcheckstyle.skiptrue -DskipTests注意:Maven中 -DskipTests 和 -Dmaven.test.skiptrue 都是跳过测试用例。 -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-clas…

kafka的zookeeper.connect参数带路径

常见的kafka配置文件server.properties的zookeeper连接配置 zookeeper.connecthostname1:2181,hostname2:2181,hostname2:2181 log.dirs/data01/kafka/log,/data02/kafka/log,/data03/kafka/log有时可能会看到类似下面的配置 zookeeper.connecthostname1:2181,hostname2:2181/k…

maven打包时包含所有依赖,并且包含第三方依赖

目录1. maven打包后jar包中包含所有依赖,并且包含第三方依赖1.1 安装第三方jar到maven本地仓库1.2 Maven打包时,包含所有依赖的jar包2. 通过pom引入第三方依赖3. 通过Add as Library引入第三方依赖1. maven打包后jar包中包含所有依赖,并且包含…

SVN本地没有提交却被还原,找回本地的文件记录的方法

svn本地没有提交却被还原【右键-Team-还原】找回本地的文件记录的方法 【我用的是Eclipse】 1、文件还在,恢复删除或覆盖的代码 右键-compare with -local history, 按照左下角的时间点恢复删除或覆盖右侧的代码。 点击Restore就恢复了 用ctrlz无法恢复…

java -jar指定main方法

com.king.demo01.Demo01 public class Demo01 {public static void main(String[] args) {System.out.println("这是Demo01&#xff0c;args参数&#xff1a;" Arrays.toString(args));} }pom文件中添加以下内容 <build><plugins><plugin><gro…

Java获取本机ip

// 获取ip public static String getAddress() {String localIP "localhost";try {Enumeration<NetworkInterface> allNetInterfaces NetworkInterface.getNetworkInterfaces();InetAddress ip null;while (allNetInterfaces.hasMoreElements()) {NetworkIn…