首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle SQL: Group by在CASE语句中不使用聚合

Oracle SQL中的Group by子句用于将结果集按照指定的列进行分组。在Group by子句中,可以使用聚合函数对每个分组进行计算并返回聚合结果。然而,在CASE语句中,不能直接使用聚合函数。

CASE语句是一种条件表达式,用于根据不同的条件返回不同的结果。它可以在SELECT语句中使用,但在CASE语句中不能直接使用聚合函数,因为聚合函数需要对整个分组进行计算,而CASE语句是逐行进行计算的。

如果需要在CASE语句中使用聚合函数,可以通过子查询或者内连接的方式来实现。例如,可以先使用子查询计算出需要的聚合结果,然后再在外层查询中使用CASE语句根据条件返回相应的结果。

以下是一个示例,演示如何在Oracle SQL中使用Group by和CASE语句:

代码语言:txt
复制
SELECT column1, column2, 
    CASE 
        WHEN column3 > AVG(column3) THEN 'Above Average'
        WHEN column3 < AVG(column3) THEN 'Below Average'
        ELSE 'Average'
    END AS result
FROM table
GROUP BY column1, column2;

在上述示例中,我们使用了AVG函数计算出column3的平均值,并在CASE语句中根据每行的column3值与平均值的比较结果返回相应的结果。

需要注意的是,以上示例中的table是一个占位符,实际使用时需要替换为具体的表名。

对于Oracle SQL中的Group by和CASE语句的更多详细信息,可以参考腾讯云的Oracle数据库产品文档:Oracle数据库产品文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL Cookbook》 - 第三章 多表查询

如果习惯FROM子句中,而不是WHERE子句中,写连接逻辑,则可以使用JOIN子句。 如果从可阅读性角度来说,表关联的时候,关联条件写在ON子句中,过滤条件写在WHERE子句中,会更让人理解。...新增连接查询而不影响其他连接查询 如果是DB2、MySQL、PG以及SQL Server、Oracle 9i以上,可使用, select e.ename, d.loc, eb.received   from...组合适用连接查询和聚合函数 如果连接查询产生了重复行,通常有两种办法来使用聚合函数, (1) 调用聚合函数时,使用关键字DISTINCT,每个值都会先去掉重复项再参与计算。...(2) 进行连接查询之前先执行聚合运算(以内嵌视图),避免错误的结果,因为聚合运算产生在连接查询之前。...; DB2、OracleSQL Server除了以上操作,还可以使用窗口函数sum over, select e.deptno, d.total_sal, sum

2.3K50

程序员SQL 时常犯的10个错误

6、一个临时的笛卡尔积集合中使用 DISTINCT 或 UNION 消除重复项 通过复杂的连接,人们可能会对SQL句中扮演关键角色的所有关系失去概念。...8、使用聚合函数代替窗口函数(window functions) 介绍窗口函数之前,SQL聚合数据意味着使用GROUP BY语句与聚合函数相映射。...很多情形下都工作得很好,如聚合数据需要浓缩常规数据,那么就在join子查询中使用group查询。 但是SQL2003中定义了窗口函数,这个很多主流数据库都实现了它。...使用窗口函数: 使SQL更易读(但在子查询中没有GROUP BY语句专业) 提升性能,像关系数据库管理系统能够更容易优化窗口函数 解决方法: 当你子查询中使用GROUP BY语句时,请再三考虑是否可以使用窗口函数完成...9、使用内存间接排序 SQL的ORDER BY语句支持很多类型的表达式,包括CASE语句,对于间接排序十分有用。

12910

Java 程序员常犯的 10 个 SQL 错误

6、一个临时的笛卡尔积集合中使用 DISTINCT 或 UNION 消除重复项 通过复杂的连接,人们可能会对SQL句中扮演关键角色的所有关系失去概念。...8、使用聚合函数代替窗口函数(window functions) 介绍窗口函数之前,SQL聚合数据意味着使用GROUP BY语句与聚合函数相映射。...很多情形下都工作得很好,如聚合数据需要浓缩常规数据,那么就在join子查询中使用group查询。 但是SQL2003中定义了窗口函数,这个很多主流数据库都实现了它。...使用窗口函数: 使SQL更易读(但在子查询中没有GROUP BY语句专业) 提升性能,像关系数据库管理系统能够更容易优化窗口函数 解决方法: 当你子查询中使用GROUP BY语句时,请再三考虑是否可以使用窗口函数完成...9、使用内存间接排序 SQL的ORDER BY语句支持很多类型的表达式,包括CASE语句,对于间接排序十分有用。

1.5K20

Java 程序员常犯的 10 个 SQL 错误!

6、一个临时的笛卡尔积集合中使用 DISTINCT 或 UNION 消除重复项 通过复杂的连接,人们可能会对SQL句中扮演关键角色的所有关系失去概念。...8、使用聚合函数代替窗口函数(window functions) 介绍窗口函数之前,SQL聚合数据意味着使用GROUP BY语句与聚合函数相映射。...很多情形下都工作得很好,如聚合数据需要浓缩常规数据,那么就在join子查询中使用group查询。 但是SQL2003中定义了窗口函数,这个很多主流数据库都实现了它。...使用窗口函数: 使SQL更易读(但在子查询中没有GROUP BY语句专业) 提升性能,像关系数据库管理系统能够更容易优化窗口函数 解决方法: 当你子查询中使用GROUP BY语句时,请再三考虑是否可以使用窗口函数完成...9、使用内存间接排序 SQL的ORDER BY语句支持很多类型的表达式,包括CASE语句,对于间接排序十分有用。

1.2K20

Java 程序员常犯的 10 个 SQL 错误!

6、一个临时的笛卡尔积集合中使用 DISTINCT 或 UNION 消除重复项 通过复杂的连接,人们可能会对SQL句中扮演关键角色的所有关系失去概念。...8、使用聚合函数代替窗口函数(window functions) 介绍窗口函数之前,SQL聚合数据意味着使用GROUP BY语句与聚合函数相映射。...很多情形下都工作得很好,如聚合数据需要浓缩常规数据,那么就在join子查询中使用group查询。 但是SQL2003中定义了窗口函数,这个很多主流数据库都实现了它。...使用窗口函数: 使SQL更易读(但在子查询中没有GROUP BY语句专业) 提升性能,像关系数据库管理系统能够更容易优化窗口函数 解决方法: 当你子查询中使用GROUP BY语句时,请再三考虑是否可以使用窗口函数完成...9、使用内存间接排序 SQL的ORDER BY语句支持很多类型的表达式,包括CASE语句,对于间接排序十分有用。

1.2K20

神奇的 SQL ,同时实现小计与合计,阁下该如何应对

GROUP BY + UNION ALL   直接上 SQL   这个 SQL ,大家都能看懂,我就不做过多解释了   补充问下,用 UNION 可以吗   答案是可以的,但由于两条 SELECT 语句的聚合键不同...在我看来不仅繁琐,效率也会因为繁琐而低下   面试官又会接着问了:只用 SQL 的前提下,有没有更合适的实现方法?   此时,各位又该如何应对?   ...如果我们在后端将 Null 处理成 合计 ,为什么直接用方式: GROUP BY + 应用程序汇总 ?   ...,例如在 PostgreSQL 实现小计与合计     主流的关系型数据库( OracleSQL Server 、 DB2 、 PostgreSQL )都是按 SQL 标准来实现的     唯独...BY(registration_date) 的聚合记录   所谓 CUBE ,就是将 GROUP BY 子句中聚合键的 所有可能组合 的聚合结果集中到一个结果集中的功能   因此,组合的个数就 2

20810

算法工程师-SQL进阶:强大的Case表达式

SQL句中的位置非常灵活,可以放在select、where以及group by等多个地方。 本题中要注意sql先执行group by,然后最后执行select。...表达式聚合函数内使用 eg3: 现在有一张城市-人口明细表,请统计每个城市不同性别的人口(交叉表)。...,select语句中使用了两个case表达式,第一个case表达式是将所有sex!...这个例子的技巧是:分组后将count(*)等聚合函数作为分支判断条件,和having筛选group有相似的作用,但是比having功能更强大的是,case可以多层嵌套使用小组内部还可以使用case表达式进行分支过滤和重构...group by子句,可以实现自定义分组逻辑; case表达式可以结合统计函数使用,可以统计函数内使用,也可以统计函数外使用,因为,它是一个值。

2K20

《10步完全理解SQL》收获

可能也是自己学习精,没有去把SQL和数据库原理中的关系运算等知识联系在一起。...我们使用SQL的时候只是声明我们想要的结果集即可,数据库会自己处理好逻辑并返回结果。...2  SQL语法按语法顺序执行 SQL语法执行顺序应该是: FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION ->...BY 语句后面的字段或者聚合函数; 当你的语句中没有 GROUP BY 的时候,可以使用开窗函数代替聚合函数; 当你的语句中没有 GROUP BY 的时候,你不能同时使用聚合函数和其它函数; 有一些方法可以将普通函数封装在聚合函数中...; 7  灵活使用SQL句中的几个关键字 DISTINCT:映射之后对数据进行去重 UNION:将两个子查询拼接起来并去重 UNION ALL:将两个子查询拼接起来但不去重 EXCEPT:将第二个子查询中的结果从第一个子查询中去除

63310

SQL 中 HAVING 的魅力,多数人容易忽略

初识 HAVING 关于 SQL 中的 HAVING,相信大家都不陌生,它往往与 GROUP BY 配合使用,为聚合操作指定条件 说到指定条件,我们最先想到的往往是 WHERE 子句,但 WHERE 子句只能指定行的条件...能够使用的要素有 3 种: 常数 、 聚合函数 和 聚合键 ,聚合键也就是 GROUP BY 子句中指定的列名 示例中的 HAVING COUNT() = 3 , COUNT() 是聚合函数,3 是常数...这样,共同部分的元素的平均值就是中位数,思路如下图所示 像这样需要根据大小关系生成子集时,就轮到非等值自连接出场了 -- 求中位数的SQL 语句:HAVING 子句中使用非等值自连接 SELECT...而“行”所对应的条件应该写在 WHERE 子句中,这样一来,写出来的 SQL 语句不但可以分清两者各自的功能,而且理解起来也更容易 执行速度更快 使用 COUNT 等函数对表中数据进行聚合操作时,DBMS...SQL 面向集合特性的最为有效的方法 2、HAVING 子句的要素 3 个要素:常数、聚合函数 和 聚合键 HAVING 大多数情况下和结合 GROUP BY 来使用,但不是一定要结合 GROUP BY

1K50

常用SQL语句和语法汇总

DML(数据操纵语言) SQL语句以分号(;)结尾 SQL区分关键字的大小写,但是约定俗成的写法是:关键字大写、表名的首字母大写、其余(列名等)小写 字符串和日期常数需要使用单引号(’)括起来 数字常数无需加注单引号...FROM WHERE ; SQL常用规则2 SQL语句可以使用AS关键字为列设定别名,设定汉字别名时需要使用双引号(’’)括起来 SELECT语句中可以使用DISTINCT...的形式表现出来 使用GROUP BY 子句时,SELECT子句中不能出现聚合键之外的列名 GROUP BY子句中不能使用SELECT子句中定义的别名 只有SELECT子句、ORDER BY子句和HAVING...子句中能够使用聚合函数,WHERE子句中不能使用聚合函数 HAVING子句要写在GROUP BY 子句后面 通常情况下,为了得到相同的结果,将条件写在WHERE子句中要比写在HAVING子句中的处理速度更快...ORDER BY子句通常写在SELECT语句的末尾 排序键包含NULL时,会在开头或者末尾进行汇总 ORDER BY子句中可以使用SELECT子句中定义的别名 ORDER BY子句中可以使用SELECT

3.1K80

神奇的 SQL 之 HAVING → 容易被轻视的主角

HAVING 子句的构成要素     既然 HAVING 操作的对象是组,那么其使用的要素是有一定限制的,能够使用的要素有 3 种: 常数 、 聚合函数 和 聚合键 ,聚合键也就是 GROUP BY 子句中指定的列名...- Unknown column 'cname' in 'having clause'     使用 HAVING 子句时,把 GROUP BY 聚合后的结果作为 HAVING 子句的起点,会更容易理解...像这样需要根据大小关系生成子集时,就轮到非等值自连接出场了 -- 求中位数的SQL 语句:HAVING 子句中使用非等值自连接 SELECT AVG(DISTINCT salary) FROM (...通过 WHERE 子句指定条件时,由于排序之前就对数据进行了过滤,那么就减少了聚合操作时的需要排序的记录数量;而 HAVING 子句是排序之后才对数据进行分组的,与 WHERE 子句中指定条件比起来...  2、HAVING 子句的要素     3 个要素:常亮、聚合函数 和 聚合键     HAVING 大多数情况下和结合 GROUP BY 来使用,但不是一定要结合 GROUP BY 来使用   3

1.1K20

神奇的 SQL 之 HAVING → 容易被轻视的主角

,能够使用的要素有 3 种: 常数 、 聚合函数 和 聚合键 ,聚合键也就是 GROUP BY 子句中指定的列名     示例中的 HAVING COUNT(*) = 3 , COUNT(*) 是聚合函数...这样,共同部分的元素的平均值就是中位数,思路如下图所示     像这样需要根据大小关系生成子集时,就轮到非等值自连接出场了 -- 求中位数的SQL 语句:HAVING 子句中使用非等值自连接SELECT...“组”的条件的,而“行”所对应的条件应该写在 WHERE 子句中,这样一来,写出来的 SQL 语句不但可以分清两者各自的功能,而且理解起来也更容易 执行速度更快     使用 COUNT 等函数对表中数据进行聚合操作时...;而 HAVING 子句是排序之后才对数据进行分组的,与 WHERE 子句中指定条件比起来,需要排序的数量就会多得多     另外,索引是 WHERE 根据速度优势的另一个有利支持, WHERE...HAVING 大多数情况下和结合 GROUP BY 来使用,但不是一定要结合 GROUP BY 来使用   3、SQL 的执行顺序     WHERE 子句是指定行所对应的条件,而 HAVING 子句是指定组所对应的条件

83420

常用SQL语句和语法汇总

;)结尾 SQL区分关键字的大小写,但是约定俗成的写法是:关键字大写、表名的首字母大写、其余(列名等)小写 字符串和日期常数需要使用单引号(’)括起来 数字常数无需加注单引号 SQL语句的单词之间需要使用半角空格或换行符来进行分割...WHERE语句来选择记录 SQL常用规则2 SQL语句可以使用AS关键字为列设定别名,设定汉字别名时需要使用双引号(’’)括起来 SELECT语句中可以使用DISTINCT来删除重复行 WHERE子句要紧跟在...SQL中的逻辑运算被称为三值逻辑(真、假、不确定) 使用GROUP BY 子句对表进行分组 使用WHERE子句和GROUP BY子句进行汇总处理 使用HAVING来指定分组的条件 ORDER BY子句...的形式表现出来 使用GROUP BY 子句时,SELECT子句中不能出现聚合键之外的列名 GROUP BY子句中不能使用SELECT子句中定义的别名 只有SELECT子句、ORDER BY子句和HAVING...子句中能够使用聚合函数,WHERE子句中不能使用聚合函数 HAVING子句要写在GROUP BY 子句后面 通常情况下,为了得到相同的结果,将条件写在WHERE子句中要比写在HAVING子句中的处理速度更快

2.5K50

SQL 进阶技巧(上)

SQL 的一些进阶使用技巧 一、巧用 CASE WHEN 进行统计 来看看如何巧用 CASE WHEN 进行定制化统计,假设我们有如下的需求,希望根据左边各个市的人口统计每个省的人口 ?...db 中,我们经常需要按分数,人数,销售额等进行排名,有 Oracle, DB2 中可以使用 RANK 函数进行排名,不过 MySQL 中 RANK 函数未实现,这种情况我们可以使用自连接来实现,如对以下...,原因主要有两点 使用 GROUP BY 子句进行聚合时会进行排序,如果事先通过 WHERE 子句能筛选出一部分行,能减轻排序的负担 WHERE 子句中可以使用索引,而 HAVING 子句是针对聚合后生成的视频进行筛选的...,但很多时候聚合后生成的视图并没有保留原表的索引结构 四、 GROUP BY 子句和 ORDER BY 子句中使用索引 GROUP BY 子句和 ORDER BY 子句一般都会进行排序,以对行进行排列和替换...FROM SomeTable WHERE col_1 > 100 / 1.1; 当然如果需要对此列使用函数,则无法避免左侧运算,可以考虑使用函数索引,不过一般推荐随意这么做。

1.1K20

为什么 GROUP BY 之后不能直接引用原表中的列

GROUP BY 后 SELECT 列的限制   标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM...=only_full_group_by   提示信息:SELECT 列表中的第二个表达式(cname)不在 GROUP BY 的子句中,同时它也不是聚合函数;这与 sql 模式:ONLY_FULL_GROUP_BY...模式会影响 MySQL 支持的 SQL 语法以及它执行的 数据验证检查,这使得不同环境中使用MySQL以及将MySQL与其他数据库服务器一起使用变得更加容易。...就会约束:当我们进行聚合查询的时候,SELECT 的列不能直接包含非 GROUP BY 子句中的列。...强行将适用于个体的属性套用于团体之上,纯粹是一种分类错误;而 GROUP BY 的作用是将一个个元素划分成若干个子集,使用 GROUP BY 聚合之后,SQL 的操作对象便由 0 阶的"行"变为了 1

1.7K10

神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列

GROUP BY 后 SELECT 列的限制   标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM...=only_full_group_by   提示信息:SELECT 列表中的第二个表达式(cname)不在 GROUP BY 的子句中,同时它也不是聚合函数;这与 sql 模式:ONLY_FULL_GROUP_BY...模式会影响 MySQL 支持的 SQL 语法以及它执行的 数据验证检查,这使得不同环境中使用MySQL以及将MySQL与其他数据库服务器一起使用变得更加容易。...GROUP BY 子句中的列。...强行将适用于个体的属性套用于团体之上,纯粹是一种分类错误;而 GROUP BY 的作用是将一个个元素划分成若干个子集,使用 GROUP BY 聚合之后,SQL 的操作对象便由 0 阶的"行"变为了 1

2.1K20

SQL为王:oracle标量子查询和表连接改写

小鱼(邓秋爽) 云和恩墨专家,有超过5年超大型数据库专业服务经验,擅长oracle 数据库优化、SQL优化和troubleshooting 编辑手记:如何提高数据的查询效率是每个人都关注的问题,今天让我们来学习如何合理使用标量子查询和表连接方式来提高查询速度吧...Oracle允许select子句中包含单行子查询,这个也就是oracle的标量子查询,标量子查询有点类似于外连接,当使用到外连接时我们可以灵活的将其转化为标量子查询。...比如上面的SQL句中对每个标量子查询都添加了rownum=1的限制,那么上述这个SQL语句如何改写为表的外连接了。...by dname,deptno生成的数据不会有(dname=x deptno=a)和(dname=y deptno=a)的数据,因为这类数据SQL句中如果存在是会报错的,那么可以确定的是对于dept2...这个SQL主要是标量子查询中用了聚合函数min和非等值关联trunc(contdate) >= a.opensaledate和trunc(buydate) >= a.opensaledate,聚合函数可以参考我们之前的写法用

3.1K60
领券