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

ORA-00979:不是GROUP BY表达式(Case语句问题)

ORA-00979是Oracle数据库中的一个错误代码,表示在使用GROUP BY子句时,SELECT语句中的某些列没有被包含在GROUP BY子句中,也没有被聚合函数所处理。这个错误通常发生在使用了CASE语句的情况下。

在Oracle数据库中,GROUP BY子句用于将结果集按照指定的列进行分组,而SELECT语句中的列必须要么包含在GROUP BY子句中,要么使用聚合函数进行处理。如果使用了CASE语句,那么在GROUP BY子句中必须包含CASE语句中的所有列。

解决ORA-00979错误的方法是:

  1. 确保SELECT语句中的所有列都包含在GROUP BY子句中,或者使用聚合函数进行处理。
  2. 如果使用了CASE语句,确保CASE语句中的所有列都包含在GROUP BY子句中。
  3. 如果需要,可以重新设计查询语句,以满足GROUP BY子句的要求。

以下是一个示例查询语句,演示了如何解决ORA-00979错误:

代码语言:txt
复制
SELECT column1, column2, SUM(column3)
FROM table
GROUP BY column1, column2;

在这个示例中,column1和column2被包含在GROUP BY子句中,而column3使用了SUM函数进行处理。

对于这个问题,腾讯云提供了一系列的数据库产品,例如云数据库 TencentDB for MySQL、TencentDB for PostgreSQL等,可以满足不同场景下的需求。您可以根据具体的业务需求选择适合的产品。

更多关于腾讯云数据库产品的信息,请访问:腾讯云数据库产品

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

相关·内容

5.7版本以上group by语句报1055错误问题

在5.7版本以上mysql中使用group by语句进行分组时, 如果select的字段 , 不是完全对应的group by后面的字段 , 有其他字段 , 那么就会报这个错误 ERROR 1055 (42000...): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 2.这是因为高版本...--------------------------------------------------------------------------------------+ | ONLY_FULL_GROUP_BY..., 这个就是严格控制group by 和select 字段的 , 在不改变sql语句的前提下 , 把这个去掉就可以了 3.我的ubuntu系统下编辑的这个文件 /etc/mysql/conf.d/mysql.cnf..., 其他系统找到对应的配置文件就可以了 ,在[mysqld]块下 ,把sql_mode配置上 , 并且去掉ONLY_FULL_GROUP_BY sql_mode='STRICT_TRANS_TABLES

53730

MySQL中无GROUP BY情况下直接使用HAVING语句问题探究

这篇文章主要介绍了MySQL中无GROUP BY情况下直接使用HAVING语句问题探究,同时探究了该情况下MAX与MIN功能的使用情况,需要的朋友可以参考下: 今天有同学给我反应,有一张表,id是主键...继续…… 但是,这个 GROUP BY NULL 会产生什么结果呢?经过查看代码和试验,可以证明,GROUP BY NULL 等价于 LIMIT 1: ?...是不是发现问题了? MAX/MIN函数取值是全局的,而不是LIMIT 1这个分组内的。 因此,当GROUP BY NULL的时候,MAX/MIN函数是取所有数据里的最大和最小值!...HAVING id=1″, 就能返回一条记录,而”SELECT * FROM t HAVING id=MAX(id)”本质上是”SELECT * FROM t HAVING id=3″,当然没有返回记录,这就是问题的根源...GROUP BY NULL时MAX/MIN的行为,是这个问题的本质,所以啊,尽量使用标准语法,玩花样SQL之前,一定要搞清楚它的行为是否与理解的一致。

4K41

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

相信大家对SQL都非常熟悉了,可能有些小伙伴会有疑问,算法工程师不是跑模型的吗?还需要学SQL?其实,很有必要!...值在SQL语句中的位置非常灵活,可以放在select、where以及group by等多个地方。 在本题中要注意sql先执行group by,然后最后在执行select。...当sql执行group by时,会根据case设定的分支规则将每一行映射为一个值,映射完成后,在根据映射完的值的种类将每行进行归组;当执行select语句时,每个组的组名是什么呢?...,在select语句中使用了两个case表达式,第一个case表达式是将所有sex!...语句设置不同情况的处理逻辑,update是按行更新,同时进行,不会导致上面所说的逻辑前后混乱的问题

2K20

《深入浅出MySQL》问答录(五)

---- Q:如果我只想对部分列套用CASE表达式,应该怎么做呢? A:可以加上WHERE,可以在END后加上WHERE子句。这样,CASE就只会套用在符合WHERE子句的列上。...---- CASE表达式可以搭配UPDATE以外的语句吗? A:why not ---- Q:讲到MIN,如果查询中的列有NULL,这会有上面影响吗? A:好问题。...NULL其实不会有影响,因为NULL代表此处无值,而不是此值为0. ---- 花絮 CASE语句 看图: 现在怎么办?是像这样吗? : 这样要执行n次啊。。。...那有没有更好的办法,其实在主语言中,这不过就是个分支语句的事情嘛,奈何SQL语言我不熟啊。。。...GROUP BY 分组 SELECT first_name,SUM(sales) FROM cookie_sales GROUP BY first_name ORDER BY SUM(sales) DESC

42211

T-SQL基础(一)之简单查询

按照SELECT语法规定书写的SQL语句较为符合英语语法习惯(对人类友好),但SELECT语句的实际执行则按照如下顺序进行(对机器友好): FROM JOIN ON WHERE GROUP BY HAVING...这意味着,GROUP BY之后的所有子句中指定的表达式必须对每组返回一个标量(单个值)。 HAVING用于对GROUP BY产生的组进行筛选。...如,WHERE子句中的多个表达式的计算并没有确定的顺序。 CASE...WHEN... CASE表达式是标量表达式,返回一个符合条件的值。注意,CASE表达式不是语句,与COUNT类似。...CASE表达式有两种使用方式: CASE后面带有列名 这种情况下,WHEN子句中只能使用标量或返回标量的表达式,这种形式称为简单格式。...CASE后面不带列名 这种情况下,WHEN子句中只能使用逻辑表达式,这种形式称为搜索格式。

4.1K20

Mysql按条件计数的几种方法

问题描述 为使讨论简单易懂,我将问题稍作简化,去掉诸多的背景。...在100,000行数据上的运行时间:0.0335 秒 分析 这种GROUP BY方法的最大问题在于:无法区分所得到的结果。...优缺点 优点就是直观,而且速度也比GROUP BY要快。虽然是3条SELECT语句,看起来比GROUP BY的方案多了2条语句,但是它不涉及到排序,这就节省了很多时间。...缺点可能就是语句稍多,对语句数量有洁癖的同学可能会比较不舒服。 方法3:使用CASE WHEN CASE WHEN语句的功能很强大,可以定义灵活的查询条件,很适合进行分类统计。...先使用CASE WHEN,当满足条件时,将字段值设置为 1, 不满足条件时,将字段值设置为NULL,接着COUNT函数仅对非NULL字段进行计数,于是,问题解决。

4.3K20

滴滴2020年面试题:如何找出最小的N个数?

select 学号,avg(分数) as 平均成绩from 成绩表group by 学号; 2.平均成绩>80的人数 可以使用使用sum函数和case表达式来统计平均成绩大于80的人数 select...、第2步中已经得到,套入这个sql语句中就是: 最终sql如下: select a.班级,sum(case when b.平均成绩>80 then 1else 0 end) as 人数,sum(case...个数据的问题:先排序(order by),然后使用limit取出前n行数据 4.遇到有筛选条件的统计数量问题时,使用case表达式筛选出符合条件的行为1,否则为0。...然后用汇总函数(sum)对case表达式输出列求和。...有筛选条件的统计数量问题的万能模板 select sum(case when  then 1       else 0end) as 数量from 信息表; 【举一反三】 1.查询最小/最大的

96200

掌握这些SQL面试题再也不怕面试懵逼了

select 学号,姓名 from student where year (出生日期)=1990; 【面试题类型】topN问题 工作中会经常遇到这样的业务问题: 如何找到每个类别下用户最喜欢的产品是哪个...1.我们先来拆解问题不是近视眼的学生都有谁?...where 成绩 + 5 › 90 (表达式在比较符号的左侧) 优化方法: where 成绩 › 90 – 5(表达式在比较符号的右侧) 3....比如,我想看看第8、9个人的学号和成绩,大多数同学会用这个语句: select 学号, 成绩 from 成绩表 where 学号 in (8, 9) 这一类语句,优化方法如下: select 学号,...在工作中,如果你只想用or从几十万语句中取几条出来,是非常划不来的,怎么办呢?下面的方法可替代or。

46541

图解面试题:如何分析中位数?

image.png 问题:写一个sql语句查询每个岗位的中位数位置的范围,并且按岗位升序排序,结果如下: image.png 解释: 第1行表示C++岗位的中位数位置范围为[2,2],也就是2。...看到“每个”,要想到《猴子 从零学会SQL》里讲过的,用分组汇总解决这类型问题。按岗位分组(group by),使用汇总函数count()得到岗位总数。...image.png 岗位数有奇数也有偶数,需要分情况进行计算,可以使用case表达式。 image.png 如何判断奇偶呢?我们可以使用%或mod函数。...表达式: image.png image.png 而case表达式中的总数是由前面使用第1步count()函数计算出来的,所以第1步要先于case语句运行,因为要把第1步的sql作为子查询。...from 成绩表 7 group by 岗位) as t 8 order by 岗位; image.png 【本题考点】 1.考察如何将复杂问题拆解为简单问题,可以使用多维度拆解分析方法,例如本案例中问题拆解问

70340

打工人打工魂!销售分析案例来啦!

销售记录表如下: 要求输出格式如下: 【解题思路】 此题主要考察 case when 行列的转换问题,即如下图所示: 通过case when 的转换,把列的项目转换成行字段,有两种方法供参考,其中第一个方法较为简洁...利用cese when语句先分别对销售员判断,得到每个销售员每日的销售金额,销售员原来为列里的一项,通过case when 转换为行的项目 select 日期, case when 销售员='小明' then...小李日销额 from 销售记录表) a group by date_format(a.日期, '%Y %m'); 得到要求的结果如下: 【本题考点】 1、重点考查用case when语句进行列数据转换和条件判断...,在实际工作中,这个语句是经常用到的 case when then else end 另外,case when有两种格式:简单函数,搜索函数。...2、case when表达式的聚合,可以用sum,max,avg等对筛选的表达式结果再进行一次聚合,如: sum(case when then else end

12330

SQL Server 2012学习笔记 (三) ----- SQL Server SQL语句

4)使用CASE函数进行查询:   联接可分为以下几类:内部联接、外部联接、交叉联接。   CASE函数用于计算条件列表并返回多个可能结果表达式之一。   ...CASE函数具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。 CASE 搜索函数计算一组布尔表达式以确定结果。   两种格式都支持可选的 ELSE 参数。...5、流程控制语句 BEGIN…END语句 IF…ELSE语句 CASE语句 WHILE语句 GOTO语句 WAITFOR语句 RETURN语句 6、批处理语句   批处理是从应用程序发送到...GO本身不是T-SQL的组成部分,只是一个用于表示批处理结束的前端指令。   ...如果 EXECUTE 语句是批处理中的第一句,则不需要 EXECUTE 关键字。如果 EXECUTE 语句不是批处理中的第一条语句,则需要 EXECUTE 关键字。

6.4K20

第35次文章:数据库简单查询

tips:这张表格仅仅是用作我们在后续的操作,并没有任何实际意义哈,不用纠结里面的每个值是不是符合现实逻辑。...返回指定的值,否则返回原本的值 select ifnull(bonus,0) from emp; 12、【补充】isnull 功能:判断某字段或表达式的值是否为null,如果是,则返回为1,如果不是,...case函数 #2.case函数的使用一:switch case 的效果 /* java 中 switch(变量或表达式){ case 常量1:语句1;break;...DEFAULT:语句n;break; } mysql 中 case 要判断的字段或表达式 when 常量1 then 要显示的值1或语句1; when 常量2 then 要显示的值2或语句2; ......ELSE{ 语句n; } mysql 中: CASE WHEN 条件1 THEN 要显示的值1或语句1; WHEN 条件2 THEN 要显示的值2或语句2; .....

1.1K20
领券