IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL之分组查询 -> 正文阅读

[大数据]SQL之分组查询

在这里插入图片描述

数据准备

创建表格

学生表

CREATE TABLE IF NOT EXISTS `student`(
	id INT AUTO_INCREMENT,
	`name` VARCHAR(100) NOT NULL,
	age INT NOT NULL,
	sex VARCHAR(50) NOT NULL,
	PRIMARY KEY (id)
)

注意自增的必须为主键

插入数据

INSERT INTO student(`name`,age,sex)VALUES('孙悟空',18,'male');
INSERT INTO student(`name`,age,sex)VALUES('唐僧',20,'male');
INSERT INTO student(`name`,age,sex)VALUES('沙和尚',30,'male');
INSERT INTO student(`name`,age,sex)VALUES('猪八戒',30,'male');
INSERT INTO student(`name`,age,sex)VALUES('女儿国王',20,'female');
INSERT INTO student(`name`,age,sex)VALUES('白骨精',18,'female');

创建的表格在这里插入图片描述

语法

一般认为分组有去重的效果,但是分组不仅仅是去重,一般可以这样想

  1. 按照某个字段进行分组,那么这个字段具有相同的值的都会放到一个几个中
  2. 一旦分组,表格(集合)

1. 简单的分组

SELECT * FROMGROUP BY 字段

如我们执行下面语句

SELECT * FROM student GROUP BY age;

在这里插入图片描述
我们看到的是每组只显示一个数据,这个数据就是表中比较位置比较靠前的数据

报错处理

如果出现一下报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'studydb.student.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by,请点击

2. 与聚合函数一起使用

SELECT 字段名,聚合函数(字段名) FROMGROUP BY 字段名

常见聚合函数count,sum,avg,max,min

我们执行下面的sql

SELECT age,count(age) FROM student GROUP BY age;

查询结果如下
在这里插入图片描述
我们可以清楚的看到age为18的有2个,age为20的有2个,age为30的有2个

group_concat

倘若我们想要知道,age为18的有哪两个,这个时候就会用到group_concat函数

执行下面的sql语句

SELECT age,COUNT(age) AS 个数, GROUP_CONCAT(`name`) AS 名字 FROM student GROUP BY age;

得到如下结果

在这里插入图片描述

3. 条件

select 字段 fromGROUP BY 字段 
HAVING 条件;

使用HAVING来进行条件的查询

SELECT age,COUNT(age) AS 个数, GROUP_CONCAT(`name`) AS 名字 
	FROM student 
	GROUP BY age 
	HAVING age > 20;

他一般是将组分号之后,再进行筛选,比如筛选出年龄大于20的人的个数

在这里插入图片描述

与where的区别

  1. where一般用于在分组之前的查询,便是能用where查询的就用where查询
  2. having一般用于分组之后的查询,结合着聚合函数进行查询(where一般不可以)

4. group by + 多字段

如果group by 后面是多个字段,那么最终所得的结果应该是每个字段的排列组合

例子

SELECT age AS 年龄,sex AS 性别,GROUP_CONCAT(`name`) AS 名字,COUNT(age) AS 个数
	FROM student 
	GROUP BY age ,sex;

结果如下
在这里插入图片描述

  1. 使用年龄进行分组,在我们的表中能分三组, 18 ,20,30
  2. 使用性别进行分组,在我们的表中能分为两组, female,male
  3. group by跟多个字段,那么两个分组进行排列组合,会分成六组,但是因为有一组没有数据,所以就没有数据
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:08:12  更:2022-03-06 13:09:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:00:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码