我有一个关联规则表(比如先行、后继和支持)。我想在GraphViz中绘制它们。我变得如此懒惰,以至于我不想为此编写任何命令式脚本,我只想直接在SQL中选择DOT源代码。
我的想法很简单
SELECT string_agg('"' || x || '" -> "' || y || '" [weight="' || weight || '"]', E'\n')
FROM rules
GROUP BY ...;
然后我意识到我在使用GROUP BY
子句时遇到了意想不到的困难,因为我需要对所有行进行分组,所以该子句应该留空。GROUP BY NOTHING
的最佳表达方式是什么,即在空列集上执行分组?
2条答案
按热度按时间n3ipq98p1#
要聚合 * 所有 * 行,您不需要使用
GROUP BY
来形成组,并且可以省略GROUP BY
子句。如果有集合函数但没有
GROUP BY
子句,则将查询视为具有包含所有选定行的单个组。或者(如果动态构建查询字符串),可以使用任何常量表达式,例如:
不能将
GROUP BY 1
用于此目的,因为整数用作GROUP BY
子句中SELECT
列表项的位置引用(序号):yhived7q2#
您可以使用
GROUPING SETS
功能,请参阅文档就像这样:
因此,如果列列表为空,则结果看起来像
GROUP BY GROUPING SETS (())
(这恰好是一个有效语法),其行为与根本没有GROUP BY
相同