精华内容
下载资源
问答
  • 分组查询
    千次阅读
    2021-03-26 12:38:43

    1. 分组查询介绍

    分组查询就是将查询结果按照指定字段进行分组,字段中数据相等的分为一组。

    分组查询基本的语法格式如下:

    GROUP BY 列名 [HAVING 条件表达式] [WITH ROLLUP]

    说明:

    • 列名: 是指按照指定字段的值进行分组。
    • HAVING 条件表达式: 用来过滤分组后的数据。
    • WITH ROLLUP:在所有记录的最后加上一条记录,显示select查询时聚合函数的统计和计算结果

     

    2. group by的使用

    group by可用于单个字段分组,也可用于多个字段分组

    -- 根据gender字段来分组
    select gender from students group by gender;
    -- 根据name和gender字段进行分组
    select name, gender from students group by name, gender;
    

     

    3. group by + group_concat()的使用

    group_concat(字段名): 统计每个分组指定字段的信息集合,每个信息之间使用逗号进行分割

    -- 根据gender字段进行分组, 查询gender字段和分组的name字段信息
    select gender,group_concat(name) from students group by gender;
    

     

    4. group by + 聚合函数的使用

    -- 统计不同性别的人的平均年龄
    select gender,avg(age) from students group by gender;
    -- 统计不同性别的人的个数
    select gender,count(*) from students group by gender;
    

     

    5. group by + having的使用

    having作用和where类似都是过滤数据的,但having是过滤分组数据的,只能用于group by

    -- 根据gender字段进行分组,统计分组条数大于2的
    select gender,count(*) from students group by gender having count(*)>2;
    

     

    6. group by + with rollup的使用

    with rollup的作用是:在最后记录后面新增一行,显示select查询时聚合函数的统计和计算结果

    -- 根据gender字段进行分组,汇总总人数
    select gender,count(*) from students group by gender with rollup;
    -- 根据gender字段进行分组,汇总所有人的年龄
    select gender,group_concat(age) from students group by gender with rollup;
    

     

    7. 小结

    • group by 根据指定的一个或者多个字段对数据进行分组
    • group_concat(字段名)函数是统计每个分组指定字段的信息集合
    • 聚合函数在和 group by 结合使用时, 聚合函数统计和计算的是每个分组的数据
    • having 是对分组数据进行条件过滤
    • with rollup在最后记录后面新增一行,显示select查询时聚合函数的统计和计算结果
    更多相关内容
  • sql基础之分组查询和聚合函数,简洁的描述了查询的语法和规则,列举实例容易理解。
  • 第十一章连接查询和分组查询.zip,第十一章连接查询和分组查询.zip,第十一章连接查询和分组查询.zip,第十一章连接查询和分组查询.zip
  • group by 子句可以将查询结果分组,并返回行的汇总信息Oracle 按照group by 子句中指定的表达式的值分组查询结果。 在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么...
  • oracle数据库之分组查询

    千次阅读 2021-05-08 11:55:04
    分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1 多表查询2)而在实际项目中的分组查询的使用也是比较多的,作为初学...

    本章内容和大家分享的是数据当中的分组查询。分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在实际项目中的分组查询的使用也是比较多的,作为初学者来说,学好分组查询的姿势是十分有必要的!

    分组查询概念

    什么是分组查询:分组查询是按照一定的规则进行分组,分组以后数据会聚合,需要使用聚合函数,但是使用聚合函数不一定要分组,分组的关键字是group by。

    首先,我们先来思考一下下面的sql语句的正确性:

    ---1.select * from t_student group by sex;

    ---按照性别分组 男或者女 但是实际显示的是所有性别,*是所有 所以会报错,因为这种方式不是group by 表达式

    查看结果:

    c5360b1e92435ad791dd845966d31bf0.png

    ---.select sex from t_student;

    ---这种方式最后显示的是所有的男女,也不是分组我们想要的 男 女 数据

    查看结果:

    e230bc8bf519ee5c093f7ce1691365b0.png

    ---3.select t.studentid,t.sex from t_student t group by sex; --6条id数据对应2条数据 不是group by表达式

    查询结果:

    775fb73b76eaf490cad42a5f244cbc31.png

    ---4.select sex from t_student group by sex;

    ---按照性别分组,只显示性别没有任何毛病--成功

    查看结果:

    97a26af2266d7dfbe750f0c31cc3c75f.png

    我们看一下聚合函数的使用,聚合函数有count()  sum()  max()  min()  avg()  round()

    --聚合函数

    count() ---统计

    sum() ---求和

    max() ---最大值

    min() ---最小值

    avg() ---平均值

    round() ---四舍五入函数

    下面小编给大家演示一下关于这些聚合函数的基础操作,有助于我们后面的分组使用:

    select max(age) from t_student;

    --求年龄的最大值

    select count(studentid) from t_student;

    --求学生总数

    select sum(studentid) from t_student;

    --所有学生id的和

    select min(studentid) from t_student;

    --求学生id中的最小值

    select avg(studentid) from t_student;

    --求学生id的平均值

    再议聚合函数:

    select sex,sum(age) from t_student group by sex;

    --以性别分组,显示性别中的男女年龄的之和

    查看结果:

    f70d7c91ddca3d4a38a062ada952ea96.png

    select sex,count(studentid) from t_student group by sex;

    --以学生性别分组,显示男生和女生分别有多少?

    查看结果:

    3f567cc6463ac742557e8d5f9aa068c4.png

    select sex,max(age) from t_student group by sex;

    --以性别分组,显示男生中年龄最大的和女生中年龄最大的。

    查看结果:

    aa4a1427cb1b7bf668c76a1b4c75e144.png

    ok,我们通过上面的例子来继续练习一下分组查询。

    --统计706班男生,女生人数?

    select sex,count(t2.studentid) from t_class t1,t_student t2 where t1.classid=t2.classid and t1.classid=

    group by sex;

    查询结果:

    e0ec59d7f35f2a85064f1b5ce049ef0e.png

    --查询826班男生、女生年龄的总和

    select sex,sum(t2.age) from t_class t1,t_student t2 where t1.classid=t1.classid

    and t1.classid= group by sex;

    查看结果:

    221a3ba4f7da7541c2dd5f57a40e2aed.png

    --查询每门课程的总分、最高分、最低分、平均分

    --查询每门课程的总分、最高分、最低分、平均分

    select t1.coursename 课程名字,max(t2.score)最高分,min(t2.score)最低分,avg(t2.score)平均分 from t_course t1,t_score t2 where t1.courseid=t2.courseid

    group by t1.coursename;

    查看结果:

    c5d87dbf015072a979cf4756222e0b5d.png

    --查询826班每位学生每门课程的总分、平均分、最高分、最低分

    select t3.coursename 课程名字,t2.name 学生姓名,

    sum(t4.score) 总分,

    avg(t4.score) 平均分,

    max(t4.score) 最高分,

    min(t4.score) 最低分

    from t_class t1, t_student t2, t_course t3, t_score t4

    where t1.classid = t2.classid

    and t2.studentid = t4.studentid

    and t4.courseid = t3.courseid

    and t1.classid =

    group by t3.coursename,t2.name;

    查看结果:

    c1b6459f2baacb3ace16eaaf4c71bb5d.png

    --查询每个学员的总分、平均分、最高分、最低分,只显示总分在250分以上的学员

    敲笔记了哈:

    1.where 使用在分组查询之前,where后面不能使用聚合函数

    2.having 分组之后的过滤,having 紧跟group by ,有having 一定有group by ,但是有group by 不一定有having

    3.having 后面可以使用聚合函数

    --显示姓名

    select t1.name 学生姓名,

    sum(t2.score) 总分,

    avg(t2.score) 平均分,

    max(t2.score) 最高分,

    min(t2.score) 最低分

    from t_student t1, t_score t2

    where t1.studentid = t2.studentid

    group by t1.name having sum(t2.score)>;

    查看结果:

    68021076c3d11507ecafccde25bf009d.png

    另外的一种展示结果:

    --不显示性名

    select sum(t2.score) 总分,

    avg(t2.score) 平均分,

    max(t2.score) 最高分,

    min(t2.score) 最低分

    from t_student t1, t_score t2

    where t1.studentid = t2.studentid

    group by t1.studentid

    having sum(t2.score) > ;

    查询结果:

    ce330678a27e48052f15b9e041c4d37a.png

    到此,分组查询我们就介绍到这里了。。。

    Oracle数据库之分组查询及排序

    分组查询:使用 group by 来设置分组,把该列具有相同值的多条记录当成一组记录来处理,然后只会输出一条记录,得到的结果会默认使用升序的方式进行排列. 规则: (1)如果使用了分组函数,或者是 g ...

    oracle数据库之分组查询(转)

    本章内容和大家分享的是数据当中的分组查询.分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在 ...

    Oracle和MySQL分组查询GROUP BY

    Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...

    ASP.NET操作ORACLE数据库之模糊查询

    ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...

    oracle数据库元数据SQL查询

    oracle数据库经典SQL查询 .查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from ...

    Oracle数据库的状态查询

    本文来源:huang_xw 的 1 状态查询 启动状态 SQL语句 结果 nomount select status from v$instance; ST ...

    Oracle数据库日期范围查询的两种实现方式

    参考文档:http://database.51cto.com/art/201108/288058.htm Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通 ...

    [转载]Oracle数据库基础--SQL查询经典例题

    Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用 本文使用的实例表结构与表的数据如下: emp员工表结构如下: ...

    Oracle数据库的基本查询

    本文用的是Oracle 10g数据库,利用PL/SQL Developer的集成开发环境(安装可以自行百度) Oracle数据库  ---> 数据库实例  --->  表空间(逻辑单位)( ...

    随机推荐

    druid数据库密码加密程序编写

    第一步:引入 druid-1.0.1.jar 架包 第二步: 编写程序 package nihao; import com.alibaba.druid.filter.config.ConfigTool ...

    poj3270

    Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6750   Accepted: 2633 Descr ...

    IE, FF, Safari前端开发常用调试工具

    一些前端开发 IE 中的常用调试工具: Microsoft Script Debugger —— Companion.JS need to install this Companion.JS —— J ...

    JavaMail 发送邮件

    JavaMail邮件发送 引用maven jar包 javax.mail

    NFC-P2P MODE

    今日看见有关国内电信业者要合组TSM (Trusted Service Manager)提供NFC 服务的新闻, 这是属于NFC 所能提供的3种Mode中的Card emulation mode (就 ...

    Linux下搭建ntp时间同步服务器

    1.ntpd软件安装(略过) 2.修改ntp.conf配置文件 vi /etc/ntp.conf 第一种配置:允许任何IP的客户机都可以进行时间同步将“restrict default kod nom ...

    sysstat -6.0.2 lib not install

    执行oracle安装包./setup.sh 后跳出,无法执行数据库的安装,并提示类似下面 的错误信息-- ERROR:===wed Aug 15 08:43:23 CST 2012===sysstat ...

    浅谈session,cookie,sessionStorage,localStorage的区别及应用场景

    浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器 ...

    Hyperledger Fabric 架构梳理

    区块链的数据结构 State数据结构 由peer维护,key/value store Ledger  记录了所有成功和不成功的状态更新交易.Ledger被ordering service构造,是一个全 ...

    Android 之 tools:context和tools:ignore两个属性的作用

    展开全文
  • 高级SQL查询-(聚合查询,分组查询,联合查询)

    千次阅读 多人点赞 2022-03-07 19:28:48
    高级SQL查询-(聚合查询,分组查询,联合查询)

    ⭐一,聚合查询

    当遇到常见的统计总数、计算平局值等操作,可以使⽤聚合函数来实现,常见的聚合函数有:
    在这里插入图片描述

    1, count函数

    返回查询到的数据的条数。

    – 统计班级共有多少同学
    SELECT COUNT(*) FROM student;
    SELECT COUNT(0) FROM student;
    – 统计班级收集的 qq有多少个,qq_mail 为 NULL 的数据不会计⼊结果
    SELECT COUNT(qq) FROM student;

    2,sum函数

    返回查询的数据总和,不是数字没有意义

    – 统计数学成绩总分
    SELECT SUM(math) FROM exam_result;
    – 及格 < 60 的总分,没有结果,返回 NULL
    SELECT SUM(math) FROM exam_result WHERE math > 60;

    3,avg函数

    返回数据的平均值,不是数据没有意义

    统计平均总分
    SELECT AVG(chinese + math + english) 平均总分 FROM exam_result;

    4,max函数

    返回所查询数据的最大值,不是数字没有意义

    – 返回数学最⾼分
    SELECT MAX(math) FROM exam_result;

    🍓max函数使用示例

    编写一个SQL查询,获取Employee表中第二高的薪水(Salary)【陌陌科技2020届校招笔试题】
    ±----±------+
    | Id | Salary|
    ±----±------+
    | 1 | 100 |
    ±----±------+
    | 2 | 200 |
    ±----±------+
    | 3 | 300 |
    ±----±------+
    例如上述Employee表,SQL查询应该返回200作为第二高的薪水。如果不存在第二高的薪水,那么查询应该返回null。

    SELECT
    max( Salary ) AS SecondHighestSalary
    FROM
    Employee
    WHERE
    Salary < ( SELECT max( Salary ) FROM Employee );

    在这里插入图片描述

    5,min函数

    返回查询到的数据的最⼩值,不是数字没有意义

    – 返回 > 60 分以上的数学最低分
    SELECT MIN(math) FROM exam_result WHERE math > 60;

    6,ifnull函数

    ifnull 函数是 MySQL 控制流函数之⼀,它接受两个参数,如果不是 NULL,则返回第⼀个参数,否则 ifnull 函数返回第⼆个参数
    ifnull函数的语法

    🌸语法: IFNULL(expression_1,expression_2);
    如果 expression_1 不为 NULL,则 IFNULL 函数返回 expression_1,否则返回 expression_2 的结果。
    🌸示例:
    ELECT IFNULL(NULL,‘Hello,Null’); – returns Hello,Null
    因为第⼀个参数为NULL。接下来我们来看⼀下使⽤IFNULL函数的实例。

    🍓 使用ifnull函数的实例

    例如:解决总成绩为null的情况

    在这里插入图片描述
    对于关于的总成绩为null,可以使用ifnull函数解决,使用ifnull(english,0),这样就可以解决这个问题,同时也可以使用非空约束或默认值为0
    在这里插入图片描述

    🍒 二,分组查询-group by

    1,分组查询

    select中使用group by 子句可以对指定列进⾏分组查询。需要满足:使用group by进行分组查询,select 指定的字段必须是“分组依据字段”,其他字段若想出现select 中则必须包含在聚合函数中

    例如:有一张员工表emp,字段:姓名name,性别sex,部门depart,工资salary。查询以下数据
    查询男女员工的平均工资
    在这里插入图片描述

    2,分组条件查询having

    group by句进行分组以后,需要对分组结果再进行条件过滤时,不能使用where语句,需要用 having

    例如:有一张员工表emp,字段:姓名name,性别sex,部门depart,工资salary。查询以下数据:
    查询姓名重复的员工信息
    在这里插入图片描述

    3,SQL查询关键字执行顺序

    SQL查询关键字执行顺序
    group by>having>order by>limit

    🍌三,联合查询(多表查询)

    1,前置知识-笛卡尔积

    笛卡尔积是联合查询也就是多表查询的基础,那什么是笛卡尔积呢?
    笛卡尔积称直积,表示为 X*Y,如 A 表中的数据为 m 行,B 表中的数据有 n 行,那么 A 和 B 做笛卡尔积,结果为 m *n 行。如以下表,它们的笛卡尔积就有 9 个:
    在这里插入图片描述
    ⼀个人只能在⼀个班级,张三在 Java31、李四在Java33、王五在 Java30,标出笛卡尔积和有效的数据信息

    创建班级表,课程表,学生表,成绩表,添加测试数据

    -- 班级表添加数据
    insert into class(id,classname) values(1,'Java班级'),(2,'C++班级');
    
    -- 课程表添加数据
    insert into course(id,name) values(1,'计算机'),(2,'英语');
    
    -- 学生表添加数据
    insert into student(id,sn,username,mail,class_id) values(1,'CN001','张三','zhangsan@qq.com',1),(2,'CN002','李四','lisi@qq.com',2),(3,'CN003','王五','wangwu@qq.com',1);
    
    -- 成绩表添加数据
    insert into score_table(id,score,student_id,course_id) values(1,90,1,1),(2,59,1,2),(3,65,2,1),(4,NULL,2,2);
    

    2,内连接

    内连接侧重于两个表之间的共性,它的作用是使用联接,比较两个(或多个)表之间的共有数据,然后返回。
    如我要查询学生的成绩,涉及到两张表:学⽣表和成绩表,使用内连接查询的数据是下图的红色部分:
    在这里插入图片描述

    2.1内连接语法

    语法
    select * from t1 join t2 [on 过滤条件] [where 过滤条件]

    内连接的写法有以下 4 种:
    1 select * from t1 join t2;
    2 select * from t1 inner join t2;
    3 select * from t1 cross join t2;
    4 select * from t1,t2;

    2.2示例分析

    有班级表,课程表,成绩表,学生表
    查询学生张三的成绩

    select st , s from score_table st join student s on s.id=st.student_id where s.username=‘张三’;

    (1)使用内连接查询(笛卡尔积)
    在这里插入图片描述
    (2)使用on过滤无效条件,在使用where进行过滤得到张三的成绩
    在这里插入图片描述

    2.3内连接查询的问题

    我们发现学生表有 3 个用户,然而使用内连接查询的时候,王五同学的数据⼀直没被查询到,王五同学可能是考完试转班过来的,所以只有学⽣表有数据,其他表没有数据。但即使这样,我们也不能漏⼀个⼈,如果其他表为空,成绩可以是 NULL 或者 0,但不能遗漏,这个时候就需要使用外连接了。

    3,外连接

    外连接包括内连接和其他至少⼀张表的所有满足条件的信息,外连接包括:
    左(外)连接
    右(外)连接
    其中左连接查询的内容如下图红色部分
    在这里插入图片描述
    右连接如下图红色部分
    在这里插入图片描述

    3.1左连接和右连接语法

    左连接语法

    🍒 select * from t1 left join t2 [on 连接条件];
    左连接以左边的表为主查询数据

    右连接语法

    🍒 select * from t1 right join t2 [on 连接条件];
    右连接以右边的表为主查询数据

    示例分析

    查询所有人的成绩
    1,使用左连接查询,student表为主表
    在这里插入图片描述
    2,使用右连接查询,score_table表为主表
    在这里插入图片描述

    3.2左连接和右连接的区别

    left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
    right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。

    3.3on和where的区别

    1,on和where

    🌸 on是连接两个表时的笛卡尔积形成中间表的约束条件
    🌸 where是在有on条件的select语句中过滤中间表的约束条件,在没有on的单表查询中,是限制物理表或中间表记录的约束条件
    因此on只进行连接操作,where只过滤中间表的记录

    (1)内连接的on可以省略,而外连接的不能省略
    (2)on在内连接和外连接的执行效果不同
    (3)在外连接中on和where不同
    在外连接中若是有多个查询条件,应将查询条件写在where中,而不是写在on中,在on中一般情况下只需要写一个笛卡尔积无效数据的过滤条件即可

    4,自连接

    ⾃连接是指在同⼀张表连接自身进行查询。

    示例

    查询英语成绩>计算机成绩的数据

    select st1.score 英语,st2.score 计算机 from score_table st1,score_table st2 where st1.student_id=st2.student_id and st1.score>st2.score;

    在这里插入图片描述
    从上⾯的语法“select * from t1,t2”我们可以看出,⾃连接就是查询同⼀张表的内查询,因为这个语句就
    是内连接的查询语句

    5,子查询

    ⼦查询是指嵌⼊在其他 sql 语句中的 select 语句,也叫嵌套查询

    示例

    查询计算机或英语的成绩

    select * from score_table where course_id in(select id from course where name=‘计算机’ or name=‘英语’);

    在这里插入图片描述

    6,合并查询

    合并查询⽤于合并结果集相同的两张(多张)表,它有两个关键字:
    union
    union all

    (1)union的使用

    查询 id 小于 3 和名字为“英语”的课程:

    select * from course where id<3
    union
    select * from course where name=‘英语’;
    – 或者使⽤ or 来实现
    select * from course where id<3 or name=‘英语’;

    在这里插入图片描述

    (2)union all 的使用

    该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行
    查询 id 小于 3,或者名字为“英语”的课程

    – 可以看到结果集中出现重复数据Java
    select * from course where id<3
    union all
    select * from course where name=‘英语’;

    在这里插入图片描述

    🌸(3)union和union all的区别

    Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序
    union在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
    实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表union
    Union All:对两个结果集进行并集操作,包括重复行,不进行排序
    如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

    展开全文
  • ORACLE分组查询和统计等

    千次阅读 2020-12-19 02:37:36
    select flow_id,rw from (select t.flow_id ,rownum as rw from apex_030200....子查询引用只能在查询出的结果中引用,比如子查询没有查出flow_id,外层不能用,另外外层不能引用内层的t3.薪水前三名,内层查出薪水 ...

    select flow_id,rw from (select t.flow_id ,rownum as rw from apex_030200.wwv_flow_list_templates t)  where rw >= 5

    1.rownum只能用加别名

    2.子查询引用只能在查询出的结果中引用,比如子查询没有查出flow_id,外层不能用,另外外层不能引用内层的t

    3.薪水前三名,内层查出薪水 order desc的虚表外层使用rownum<3

    4.merge可以实现存在数据就update不存在你就insert

    merge into product a

    using (select  1717 product_id, '002' req_no from dual b)

    on (a.product_id = b.product.id and a.req_no = b.req.no)

    when matched then

    update set  product name = ''.....................

    when not matched then

    insert () values ()

    5.start with connect by 可以查询出一组树的数据,注意最后connect by的条件(父节点=子节点 向上查询 反之向下查询)

    可以order排序,可以加入两棵树(or),也可以加入where条件

    select * from emp

    where......

    start with empnc = 7369 or empnc = 7204(注意不能用and )

    connect by prior mgr = empno

    order by ...

    6 份额(查询某数据占有总数据的百分比)

    select t.empno,t.ename,t.sal,

    100*round(sal/sum(sal) over(),5)

    from emp t

    7 连续求和(同名分为同组 累加)

    select t.empno,t.ename,t.sal,

    sum(sal) over(order by sal)

    from emp t

    8.带条件的连续求和(分部门连续求和)

    select t.empno,t.ename,t.sal,t.deptno,

    sum(sal) over(partition by t.deptno order by sal)

    from emp t

    9.分部门总和(取出orderby)

    select t.empno,t.ename,t.sal,t.deptno,

    sum(sal) over(partition by t.deptno)

    from emp t

    10工资的分组查询份额(总数的百分比)带上部门分组

    select t.empno,t.ename,t.sal,t.deptno,

    100*round(sal/sum(sal) over (partition by t.deptno),4)

    from emp t

    注意这里查询的是“”分组“,因此这里查询的是变成一组为一个100%,查询的是一个部门中员工在本部分所占用的薪水比例

    11分组查询出单一条件并分级(查询某一个部门的薪水的级别)注意rank()和row_number()的区别 rank是跳跃性并列(1.1.3.3.5) row_number(1.2.3.4.5)

    select t.*,ROW_NUMBER() over(partition by t.deptno order by t.sal desc) rank from emp t

    12“总”。。。。。。这个字眼一般使用group by(区分于over(partition by order by))

    按部门分组查询部门的总薪水

    select sum(t.sal),t.deptno from emp t group by t.deptno

    13 总的基础上再次分组 group by + rollup

    select sum(t.sal),t.deptno from emp t group by rollup (t.deptno)汇总后将总和进行求和

    select sum(t.sal),t.job,t.deptno from emp t group by rollup (t.deptno,t.job)注意多个rollup其实只有第一个参数有效

    14cube 连接在order by后面(代替ROLLUP) rollup升级版 全部分组

    15grouping实现不用java代码就可以对oracle 查询出的null字段进行赋值 0 本身结果 1合计结果

    select sum(t.sal),t.deptno,

    (case

    when((grouping(t.job)=1 and grouping(t.deptno)=0)) then '部门小计'

    when((grouping(t.job)=1 and grouping(t.deptno)=1)) then '部门总计'

    else t.job end) as

    job from emp t group by rollup (t.deptno,t.job)

    16分组后的字段累加(比如按照员工名称,根据月份分组,实现自1月份到12月份工资累加,即二月份是 1月 + 2月 。。)

    select t.empno, t.ename, t.sal, sum(sal) over (partition by t.ename order by t.sal desc) from emp t

    17分组最高值 最低值 平均值 使用 max() over(partition by order by)代替sum() 还可以用min() avg()

    18select * from v$transaction 查看事务

    19多层分组函数和子查询之间的冲突问题

    select a.CREATOR, a.count_Sum, b.full_name, b.dept_code, b.area_code

    from (select temp.c CREATOR, count(temp.c) as count_Sum

    from (select t.ca,

    c.lv,

    instr(t.ca, ',', 1, c.lv) + 1,

    substr(t.ca,

    instr(t.ca, ',', 1, c.lv) + 1,

    instr(t.ca, ',', 1, c.lv + 1) -

    (instr(t.ca, ',', 1, c.lv) + 1)) AS c

    from (select ',' || checker || ',' AS ca,

    checker,

    LENGTH(checker),

    length(checker || ','),

    REPLACE(checker, ','),

    length(REPLACE(checker, ',')),

    nvl(length(REPLACE(checker, ',')), 0),

    length(checker || ',') -

    nvl(length(REPLACE(checker, ',')), 0) AS cnt

    FROM wm_time_info a

    where a.check_result != 1) t,

    (select LEVEL lv from dual CONNECT BY LEVEL <= 100) c

    where c.lv <= t.cnt) temp

    group by temp.c) a,

    base_user b

    where a.CREATOR = b.user_code

    外层查询和内层分组冲突

    --select a.CREATOR, a.count_Sum ,b.full_name,b.dept_code,b.area_code from (

    select o.CREATOR,

    count(o.CREATOR) as count_Sum,

    FULLNAME,

    DEPTCODE,

    AREACODE

    from (select temp.c CREATOR,

    b.full_name FULLNAME,

    b.dept_code DEPTCODE,

    b.area_code AREACODE,

    work_date

    from (select work_date,

    t.ca,

    c.lv,

    instr(t.ca, ',', 1, c.lv) + 1,

    substr(t.ca,

    instr(t.ca, ',', 1, c.lv) + 1,

    instr(t.ca, ',', 1, c.lv + 1) -

    (instr(t.ca, ',', 1, c.lv) + 1)) AS c

    from (

    ---

    select work_date,

    ',' || checker || ',' AS ca,

    checker,

    LENGTH(checker),

    length(checker || ','),

    REPLACE(checker, ','),

    length(REPLACE(checker, ',')),

    nvl(length(REPLACE(checker, ',')), 0),

    length(checker || ',') -

    nvl(length(REPLACE(checker, ',')), 0) AS cnt

    FROM wm_time_info a

    where a.check_result != 1

    ---

    ) t,

    (select LEVEL lv from dual CONNECT BY LEVEL <= 100) c

    where c.lv <= t.cnt) temp,

    base_user b

    where temp.c = b.user_code) o

    --where work_date >='2016-01-10'

    group by o.CREATOR, FULLNAME, DEPTCODE, AREACODE

    --) a ,base_user b where a.CREATOR = b.user_code

    20 注意 本条select中的分组和子查询都不可以作为函数的参数传入

    五、Oracle 分组查询、视图

    一.分组函数1.avg:平均分2.sum:求和3.max:最大值4.min:最小值注意:前面四个必须针对数值字段,且参数只能是一个5.count:求个数 二.分组查询1.语法是 group by 分组 ...

    solr4&period;5分组查询、统计功能介绍

    说到分组统计估计大家都不会陌生,就是数据库的group by语句,但是当我们采用solr4.5全文检索时,数据库提供再好的sql语句都没有任何的意义了,那么在solr4.5中我们如何做到分组统计呢?其 ...

    oracle分组查询

    分组函数 在分组函数中,如果有一个查找项分组,其他项必须也分组,比如下面的语句会报错,因为sal分组了,而ename没有分组: 1.显示工资最高的员工: 2.显示所有员工的平均工资: 2.1使用系统函 ...

    oracle 分组查询

    常用的函数:            ·:统计个数:COUNT(),根据表中的实际数据量返回结果:            ·:求和:SUM(),是针对于数字的统计,求和            ·:平均值 ...

    oracle分组查询实例ORA-00979和ORA-00937错误分析

    select J.ZWJGH,J.CZZXBH,J.JZZT,J.CWNY,J.JZPZH sum(J.FSE) from JZPZXX J &l ...

    Mysql按时间段分组查询来统计会员的个数

    1.使用case when方法(不建议使用)-  代码如下 复制代码 SELECT    COUNT(DISTINCT user_id) user_count,    CASE    WHEN cre ...

    【Django】Django 如何支持 分组查询、统计?

    代码: from django.db.models import Sum alarm_sum_group_items = models.FILE_PROTECT_ALARM.objects.filte ...

    oracle数据库之分组查询

    本章内容和大家分享的是数据当中的分组查询.分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在 ...

    rails小技巧之分组查询统计并去重

    分组查询并统计 SpecialGroup.group(:special_type).count select special_type,count(*) from special_groups gro ...

    随机推荐

    CodeForces Round &num;179 &lpar;295A&rpar; - Greg and Array 一个线段树做两次用

    线段树的区间更新与区间求和...一颗这样的线段树用两次... 先扫描1~k...用线段树统计出每个操作执行的次数... 那么每个操作就变成了 op. l  , op.r , op.c= times* ...

    Objc将数据写入iOS真机的plist文件中

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 如何写入模拟器的博文在 这里 但是这对真机不管用,因为在真机环 ...

    SQL SERVER 2008远程数据库移植到本地的方法

    https://blog.csdn.net/wuzhanwen/article/details/77449229 Winform程序或网站后台的SQL SERVER 2008放置在远程服务器上,用Mi ...

    sqlmap注入入门

    sqlmap注入入门 sqlmap的用法: ​ linux中: sqlmap [选项] ​ Windows中: python sqlmap [选项] 常用的参数及含义: 目标 ​ -d DIRECT ...

    【转载】C&num;递归删除文件夹目录及文件

    在C#文件操作过程中,有时候需要删除相应目录,如果文件夹中含有其他文件夹或者文件,也需要一并进行删除,此时可能就需要使用递归来删除文件夹目录以及文件,递归过程中,如果遍历的对象是文件夹,则删除文件夹, ...

    CentOS7 yum 安装 PHP 5&period;6&period;24

    配置yum源 追加CentOS 6.5的epel及remi源. # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel- ...

    Java基础&lowbar;0302:类和对象

    定义类 class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 /** * 输出对象完整信息 */ public voi ...

    mybatis 映射器(mappers) 配置说明 加载映射文件方式

    映射器(mappers) 既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了.但是首先我们需要告诉 MyBatis 到哪里去找到这些语句. Java 在自动查找这 ...

    MySQL和Mariadb二进制日志binlog详解

    Mariadb/mysql提供了4中不同的日志,分别是错误日志(error.log).普通日志(general log).慢日志(slow log)以及二进制日志(binlog).错误日志记录了系统启 ...

    C&num; WinForm中添加用户控件

    转:https://blog.csdn.net/haelang/article/details/40681003 有的时候我们需要频繁使用一些系统默认工具的组合,那么就可以使用自定义用户控件. 起一个 ...

    展开全文
  • 互联网集团出题,能做出这些题,就说明掌握了分组查询的知识点
  • 分组查询操作(MySQL)

    千次阅读 2022-01-18 14:44:22
    目录前言分组查询语法简单分组查询增加了分组前筛选的分组查询增加了分组后筛选的分组查询group by子句类型按函数筛选多个字段分组添加排序总结 前言 介绍MySQL的单行函数操作我们选择使用可视化软件Navicat,对应...
  • Mysql-DQL(分组查询)

    2021-01-07 14:46:34
    进阶5:分组查询 语法: select 查询列表 from 表 【where 筛选条件】 group by 分组的字段 【order by 排序的字段】; 注意: 查询列表必须特殊,要求是分组函数和group by后出现的字段 特点: 1、分组查询中的筛选条件...
  • Oracle之分组查询

    千次阅读 2021-05-05 07:49:36
    分组查询分组,将 事物 按某方面 相同性质 进行归类。即在同组事物中,某方面性质是一致的;不同组之间,在指定性质上是不同的。按某指定性质分组后,一个包含有任意个对象的组会以该特性作为标识,整体作为一条记录...
  • MySQL 分组查询

    千次阅读 2022-03-15 20:56:20
    select关键字之后使用 * ,表示对查询的结果进行分组之后,显示每组的第一条记录(这种显示是没有意义的) select 后 通常显示 分组字段 和 聚合函数(对分组后的数据进行统计、求和、平均值等操作) having ...
  • MySQL数据库基础:分组查询

    千次阅读 2022-05-04 12:40:13
    分组查询】 作者:zhenyi 专栏:mysql数据库1 简介:MySQL基础专栏文章,适合MySQL基础阶段的学习与阅读。 文章所用文件,可与作者联系获取!如果对您有帮助,点个关注吧,持续更新中,谢谢支持。如果有问题...
  • MySQL进阶(分组查询,多表连接查询)

    千次阅读 多人点赞 2021-10-15 10:38:05
    接着上一期的数据库继续讲,上回我们说到简单的排序查询,接下来我们继续进阶,分组查询,多表连接查询。在学习分组查询之前不得不提到函数这个概念。因为分组查询常常是跟着分组函数联系起来的。 一 常见函数...
  • 分组查询 group by group by 属性名 [having 条件表达式][ with rollup] “属性名 ”指按照该字段值进行分组;“having 条件表达式 ”用来限制分组后的显示,满足条件的结果将被显示;with rollup 将会在所有记录的...
  • 分组查询语法:select 分组函数 , 列1(要求出现在group by的后面),列2 ,..., from 表 (where 筛选条件) group by 分组的列表1,列2,.....(order by 子句) 区分: 这两种都有筛选条件的用法,但是使用的情况...
  • Mysql:分组查询

    千次阅读 2020-11-15 20:00:25
    分组查询 1、分组查询是对数据按照某个或多个字段进行分组,在MYSQL中使用GROUP BY关键字对数据进行分组 2、GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组。字段中值相等的为一组 ⑴分组的核心是...
  • MongoDB分组查询、聚合查询

    千次阅读 2022-01-26 17:54:09
    MongoDB分组查询、聚合查询
  • SQLServer学习笔记七:分组查询

    千次阅读 2022-03-21 10:28:09
    使用GROUP BY进行分组查询,从不同方面将数据进行分组汇总。
  • Mongodb分组查询

    千次阅读 2021-12-06 19:21:00
    Mongodb分组查询
  • 分组查询(重要)

    千次阅读 2022-03-02 21:57:56
    1.什么是分组查询? 在实际的开发中,可能需要先对一组数据进行分组,然后再对每一组的数据进行操作,这时需要用到分组查询 2.分组查询的语法 select...from...group by... 例如:计算每个部门的工资和?计算每...
  • SQL的分组查询

    千次阅读 2022-04-07 20:31:34
    SQL的分组查询 一、在SQL中Group By从字面的意思上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个‘数据集’划分成若干个‘小区域’,然后针对若干个‘小区域’进行数据处理。在此语法中group ...
  • Mybatis之分组查询

    千次阅读 2022-04-11 17:04:44
    在应用开发中,分组统计是非常经典的需求,在springboot+mybatis+mysql中实现分组统计。 学生信息统计场景,学生包含姓名、性别、年龄、地址等属性。 按性别分组统计数量 按地址分组统计数量 按地址、性别分组统计...
  • sql语句分组查询

    千次阅读 2021-06-07 19:56:22
    /* 引入:查询每个部门的平均工资...1.分组查询中的筛选条件分为两类 数据源 位置 关键字 分组前筛选 原始表 group by子句的前面 where 分组后筛选 分组后的结果集 group by子句的后面 having ①.分组函数
  • SQL基础系列(三)——分组查询

    千次阅读 2022-04-20 21:47:01
    SQL基础系列的第三篇文章,主要介绍分组查询,仍然是在单表查询的范围内。理解单表分组查询后,多表分组查询也会比较好理解。
  • 数据库MySQL--分组查询

    千次阅读 2021-01-19 22:50:39
    分组数据:group by 子句分组查询语法:select 分组函数,列(要求是出现在group by的后面)from 表(where 筛选条件) # where 必须连接from关键字group by 分组的列表(having 分组列表的条件) # 分组后还有进行限制的...
  • Mybatis:动态SQL分组查询

    千次阅读 2020-08-19 14:27:41
    1. 实现思路 ...--分组查询证书信息列表--> <resultMap id="groupResultMap" type="java.util.Map"> <result column="count(1)" property="num" jdbcType="VARCHAR"/> <res..
  • MySQL SQL分组查询

    千次阅读 2021-12-25 14:53:26
    DQL语言-分组查询 一、group by 子句 语法: select 分组函数,列(要求出现在group by)的后面 from 表 【where 筛选条件】 group by 分组的列表 【order by 子句】 注意: 查询列表必须特殊,要求是分组函数和group...
  • MySQL分组查询

    千次阅读 2021-01-21 07:08:15
    在对数据表中数据进行统计时,可能需要按照一定的类别分别进行统计,比如,分别统计student表中,gender字段值为na、nv和NULL的学生成绩grade之和MySQL中,使用GROUP BY按某个字段,或者多个字段中的值,进行分组,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 350,500
精华内容 140,200
关键字:

分组查询

友情链接: caffe-master.zip