【问题标题】:Create view with subquery and group by expression in Oracle在 Oracle 中使用子查询和按表达式分组创建视图
【发布时间】:2026-01-04 09:25:01
【问题描述】:

要检索特定数据集,我必须在选择查询中使用子查询,该查询是按表达式分组的,如下所示:

SELECT SUM(b.RESERVEDROOMS) AS "Reserved Rooms",
       (SELECT country
          FROM location
         WHERE location_id = b.location_id) AS "Country"
  FROM bookingsRevenue b,
       location l
 WHERE b.location_id = l.location_id 
 GROUP BY b.location_id

它工作正常并且检索到正确的数据,但是当我尝试从中创建视图时,显示以下错误。你能帮我解决这个问题吗?

[错误] 执行 (21: 74): ORA-00979: 不是 GROUP BY 表达式

【问题讨论】:

  • 为什么要使用标量子查询?

标签: sql oracle view group-by subquery


【解决方案1】:

您的源代码似乎有些混乱。 GROUP BY 子句不正确,您也不需要使用相关子查询。 试试这个:

SELECT SUM(b.RESERVEDROOMS) AS "Reserved Rooms", l.country AS "Country"
FROM bookingsRevenue b
JOIN location l ON (b.location_id = l.location_id)
GROUP BY l.country;

如果您还希望对 location_id 进行分组,则:

SELECT SUM(b.RESERVEDROOMS) AS "Reserved Rooms", b.location_id, l.country AS "Country"
FROM bookingsRevenue b
JOIN location l ON (b.location_id = l.location_id)
GROUP BY b.location_id, l.country;

【讨论】:

  • 或者你可以使用MAX( l.country ) AS country
  • 是的,我认为 MAX(l.country) 有效,并且只有 l.country 会给我一个错误。非常感谢您的建议!