首页 > 解决方案 > 实现 GROUP BY oracle 查询导致:不是 Ruby 中的 GROUP BY 表达式

问题描述

我的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 没有这个功能,所以我改变了它并一直在尝试不同的方式,但似乎无法弄清楚为什么该组通过表达不会起作用。

标签: oracle

解决方案


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

Group by 子句说group by request_time,它只有一列,那是行不通的。

您必须应用group by所有列(一一指定),或者 - 更简单 - 使用select distinct.

基本上,我们在列列表中group by有聚合时使用。select如果没有,你不会group by

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


推荐阅读