实现 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 表达式的主要内容,如果未能解决你的问题,请参考以下文章