我有一张关联规则表(比如先行者,后续者和支持者)。我想在GraphViz中绘制它们。我变得如此懒惰以至于我不想为此编写任何命令式脚本,我只想直接在SQL中选择DOT源。
我的想法就像
一样简单SELECT string_agg('"' || x || '" -> "' || y || '" [weight="' || weight || '"]', E'\n')
FROM rules
GROUP BY ...;
然后我意识到我对GROUP BY
条款有惊人的困难。因为我需要对所有行进行分组,所以该子句应该留空。
说GROUP BY NOTHING
的最优雅方式是什么,即在一组空列上执行分组?
答案 0 :(得分:1)
要聚合所有行,您不需要使用GROUP BY
形成组,并且可以省略GROUP BY
子句。 The manual:
如果存在聚合函数但没有
GROUP BY
子句,则查询为 被视为具有包含所有选定行的单个组。
或者(如果要动态构建查询字符串),可以使用任何常量表达式,如:
...
GROUP BY true
您不能将 用于此目的,因为整数常量在GROUP BY 1
GROUP BY
中用作位置引用(序号):
答案 1 :(得分:1)
您可以使用GROUPING SETS
功能see documentation
像这样:
...
GROUP BY GROUPING SETS ((<your comma-separated list of columns>))
因此,如果您的列列表为空,则最终看起来像 GROUP BY GROUPING SETS (())
恰好是有效语法,其行为与根本没有 GROUP BY
相同