没有聚合函数的 GROUP BY

新手上路,请多包涵

我试图在没有聚合函数的情况下理解 GROUP BY (oracle dbms 的新手)

它是如何运作的?

这是我尝试过的。

我将在其上运行我的 SQL 的 EMP 表。

EMP 表

 SELECT ename , sal
FROM emp
GROUP BY ename , sal

结果

 SELECT ename , sal
FROM emp
GROUP BY ename;

结果

ORA-00979: 不是 GROUP BY 表达式

00979. 00000 - “不是 GROUP BY 表达式”

*原因:

*行动:

行错误:397 列:16

 SELECT ename , sal
FROM emp
GROUP BY sal;

结果

ORA-00979: 不是 GROUP BY 表达式

00979. 00000 - “不是 GROUP BY 表达式”

*原因:

*操作:行错误:411 列:8

 SELECT empno , ename , sal
FROM emp
GROUP BY sal , ename;

结果

ORA-00979: 不是 GROUP BY 表达式

00979. 00000 - “不是 GROUP BY 表达式”

*原因:

*操作:行错误:425 列:8

 SELECT empno , ename , sal
FROM emp
GROUP BY empno , ename , sal;

结果

所以,基本上列数必须等于 GROUP BY 子句中的列数,但我仍然不明白为什么或发生了什么。

原文由 XForCE07 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 647
1 个回答

对于任何试图将数据(例如来自外部表)分组的人,例如带有嵌套数据数组的 json 对象,您可以在 sql 中使用 array_agg 来实现这一点(您也可以将其与 json_build_object 结合使用 --- 创建一个带有键值对的 json 对象)。

作为参考,我发现这个视频对 yt 很有帮助: https ://www.youtube.com/watch?v=A6N1h9mcJf4

- 编辑

如果你想在嵌套数组中有一个嵌套数组,你可以使用 array 来实现。

在以下示例中,“variation_images”(子查询 2 - 与变体表相关)嵌套在“variation”查询(子查询 1 - 与产品表相关)下,该查询嵌套在产品查询(主查询)下:

 SELECT product.title, product.slug, product.description,

ARRAY(SELECT jsonb_build_object(
'var_id', variation.id, 'var_name', variation.name, 'images',

ARRAY(SELECT json_build_object('img_url', variation_images.images)
FROM variation_images WHERE variation_images.variation_id = variation.id)
)
FROM variation WHERE variation.product_id = product.id)

FROM product

原文由 Jack Tsin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进