带有聚合组件的 sql union

Posted

技术标签:

【中文标题】带有聚合组件的 sql union【英文标题】:sql union with an aggregation component 【发布时间】:2010-09-18 01:56:49 【问题描述】:

我有一个查询,用于在报告服务中绘制图表,类似于:

(从 tbl 中选择 Alpha、Beta、Gamma、Delta、Epsilon、Zeta、Eta、Theta、Iota、Kappa、Lambda、Mu、Nu、Xi 在哪里 (@Alphas) 中的 Alpha 和 (@Betas) 中的 Beta 和 (@Gammas) 中的 Gamma 和 Delta in (@Deltas) 和 (@Epsilons) 中的 Epsilon 和 Zeta in (@Zetas) 和 Eta 在 (@Etas) 和 Theta in (@Thetas) ) 联盟 (从 tbl 中选择 Alpha、Beta、Gamma、Delta、Epsilon、Zeta、Eta、Theta、Iota、Kappa、Lambda、Mu、Nu、Omicron 在哪里 (@Alphas) 中的 Alpha 和 (@Betas) 中的 Beta 和 (@Gammas) 中的 Gamma 和 Delta in (@Deltas) 和 (@Epsilons) 中的 Epsilon 和 Zeta in (@Zetas) 和 Eta 在 (@Etas) 和 Theta in (@Thetas))

Alpha 到 Theta 用于将它们(例如 Alpha、Beta、Gamma)连接成一个字段中的字符串的几个计算字段。 Omicron 的选择语句将生成与 Xi 相同的行数,但我真正想要的是聚合 Omicron,因此如果使用 Xi 的 Select 查询产生 9 个图例项,Omicron 的聚合选择应该只产生一个图例项,因为值Alpha 到 Theta 对 Omicron 来说并不重要。应该如何构造查询,以便我可以使用 Alpha 到 Theta 作为参数但仍然聚合 Omicron?

【问题讨论】:

【参考方案1】:

我不确定您真正想要什么,但如果我理解正确,您可以尝试以下方法:

(SELECT a,b,c,d FROM k
WHERE a in (@a) and b in (@b) and c in (@c))
UNION
(SELECT NULL,NULL,NULL,sum(e) FROM k
WHERE a in (@a) and b in (@b) and c in (@c) GROUP BY e)

NULL 只是为了能够执行联合(保持列的数量,你可能需要做列别名)

【讨论】:

【参考方案2】:

为什么不在一个选择语句中选择所有的希腊语、Xi 和 Omicron,然后用宿主语言计算总和?这是一个可能代价高昂的查询,而不是两个。

【讨论】:

我想我不明白你的回答。原始数据是直接选择的,这是在报表服务中使用数据之前在报表服务中准备数据。那么你的 sql 会是什么样子呢?

以上是关于带有聚合组件的 sql union的主要内容,如果未能解决你的问题,请参考以下文章

网络组件社区聚合物网络组件

oracle 两个sql带有order by的使用union/union all的时候报错 'ORA-00933:sql命令未正确结束' 处理办法

反射聚合物/网络组件接口

带有 LIMIT 的 SQL UNION 是不是优化了不需要的查询?

COM聚合

Flink SQL--分组聚合