实现 GROUP BY oracle 查询导致:不是 Ruby 中的 GROUP BY 表达式

Posted

技术标签:

【中文标题】实现 GROUP BY oracle 查询导致:不是 Ruby 中的 GROUP BY 表达式【英文标题】:Implementing the GROUP BY oracle query causing: not a GROUP BY expression in Ruby 【发布时间】:2021-11-05 12:58:04 【问题描述】:

我的 RUBY 代码以下列方式执行 oracle 查询,但我似乎得到了错误:

Java::JavaSql::SQLSyntaxErrorException: ORA-00979: 不是 GROUP BY 表达式

SELECT
  "REQUESTS".*
FROM
  "REQUESTS"
WHERE
  (
    customer_id = 1
    AND request_method != 'OPTIONS'
    AND request_time BETWEEN TO_TIMESTAMP('2021-10-29 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
    AND TO_TIMESTAMP(
      '2021-11-05 23:59:59.000999',
      'YYYY-MM-DD HH24:MI:SS.FF'
    )
  )
GROUP BY
  "REQUESTS"."REQUEST_TIME"

最初翻译成上述选择查询的代码是:

requests = Request.where("customer_id = ? AND request_method != ? AND request_time BETWEEN TO_TIMESTAMP(?,'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP(?,'YYYY-MM-DD HH24:MI:SS.FF')", customer.id, 'OPTIONS', start_time, end_time).group('date(request_time'))

.group('date(request_time') is translated in oracle to: GROUP BY date(request_time)

但是原来的查询似乎也不起作用,原因是Oracle没有这个功能,所以我改变了它,并一直在尝试不同的方式,但似乎无法弄清楚为什么按表达式分组不起作用。

【问题讨论】:

因为您按单个列分组,但请求所有列。请检查the documentation。而且完全不清楚您为什么将 SQLite 与 Oracle 一起标记,因为它们完全不同 【参考方案1】:

select * 表示“选择所有列”。

Group by 子句说group by request_time,它只有一列,而且这行不通。

您必须将group by 应用于ALL 列(一一指定),或者 - 更简单 - 使用 select distinct

基本上,当select 列列表中有聚合时,我们使用group by。如果没有,请不要group by

你真正会做什么取决于你想要做什么,即你期望的结果。

【讨论】:

谢谢!独特的似乎已经解决了这个问题。感谢您的帮助和支持:)

以上是关于实现 GROUP BY oracle 查询导致:不是 Ruby 中的 GROUP BY 表达式的主要内容,如果未能解决你的问题,请参考以下文章

关于C#中group by如何实现多条件分组汇总

Oracle_group by分组查询_深入

oracle group by 查询 排序

Oracle SQL group by 查询,一种 PIVOT [重复]

oracle中group by用法

oracle按照查询的所有字段group by 之后可不可以按照其中的一个字段排序啊!不可以的话要怎么做!