为了账号安全,请及时绑定邮箱和手机立即绑定

ORA-00979不是按表达式分组

ORA-00979不是按表达式分组

互换的青春 2019-05-27 13:19:40
ORA-00979不是按表达式分组我通过以下查询获得ORA-00979:SELECT cr.review_sk, cr.cs_sk, cr.full_name,tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt",cs.cs_id, cr.tracking_numberfrom review cr, cs, fact cfwhere cr.cs_sk = cs.cs_skand UPPER(cs.cs_id) like '%' || UPPER(i_cs_id) || '%'and row_delete_date_time is nulland cr.review_sk = cf.review_wk (+)and cr.fact_type_code (+) = 183050GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_numberORDER BY cs.cs_id, cr.full_name;我找不到在同一查询中同时包含GROUP BY和ORDER BY子句的任何示例。我尝试一次一个地从组中删除每个字段,但仍然得到相同的错误。
查看完整描述

4 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

你必须把的所有列SELECT的GROUP BY或使用的压缩结果为单一值(如对他们的功能MIN,MAX或SUM)。


一个简单的例子来理解为什么会发生这种情况:想象一下,你有一个像这样的数据库:


FOO BAR

0   A

0   B

并在运行SELECT * FROM table GROUP BY foo。这意味着数据库必须返回单行作为结果,第一列0才能完成,GROUP BY但现在有两个值bar可供选择。你期望哪个结果 - A或者B?或者数据库是否应该返回多行,违反了合同GROUP BY?


查看完整回答
反对 回复 2019-05-27
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

GROUP BY子句中包含所有SELECT不是组函数参数的表达式。


查看完整回答
反对 回复 2019-05-27
?
心有法竹

TA贡献1866条经验 获得超5个赞

太糟糕了,Oracle有这样的局限性。当然,不在GROUP BY中的列的结果将是随机的,但有时您需要它。愚蠢的Oracle,你可以在MySQL / MSSQL中做到这一点。

但是有一个解决Oracle的工作:

虽然以下行不起作用

SELECT unique_id_col, COUNT(1) AS cnt FROM yourTable GROUP BY col_A;

您可以使用类似下面的0来欺骗Oracle,以使您的列保持在范围内,但不能将其分组(假设这些是数字,否则使用CONCAT)

SELECT MAX(unique_id_col) AS unique_id_col, COUNT(1) AS cnt 
FROM yourTable GROUP BY col_A, (unique_id_col*0 + col_A);


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 793 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信