gpt4 book ai didi

sql - Oracle 中动态求和和分组

转载 作者:行者123 更新时间:2023-12-01 23:03:56 25 4
gpt4 key购买 nike

我有一个要求,其中有四个参数。 p1、p2、p3、p4。用户可以输入任何单个或组合。我只想显示他通过求和和分组输入的列。应排除其他列。我该怎么做?

最佳答案

这样的东西可能很适合你(我不是 100% 确定,因为你的问题非常模糊)

SELECT
CASE WHEN :p1 = 0 THEN p1 ELSE NULL END AS p1,
CASE WHEN :p2 = 0 THEN p2 ELSE NULL END AS p2,
CASE WHEN :p3 = 0 THEN p3 ELSE NULL END AS p3,
CASE WHEN :p4 = 0 THEN p4 ELSE NULL END AS p4
FROM
yourTable
GROUP BY
CASE WHEN :p1 = 0 THEN p1 ELSE NULL END,
CASE WHEN :p2 = 0 THEN p2 ELSE NULL END,
CASE WHEN :p3 = 0 THEN p3 ELSE NULL END,
CASE WHEN :p4 = 0 THEN p4 ELSE NULL END

但是请注意,SQL 对于此类查询的性能通常很差。

对于每个固定查询,都会编译一个单独的计划。用于生成结果的算法此时已固定到位。当您的参数更改时,它不会重新编译。

这很重要,因为根据您的索引,GROUP BY p1, p2 可能会产生与使用 GROUP BY p3, p4 根本不同的计划。

因此,在代码中重新生成 SQL 语句通常可以提高性能。

不要要求 SQL 使用参数来选择聚合哪些字段,而是使用参数编写全新的 SQL 语句,然后执行该新的 SQL 语句。

关于sql - Oracle 中动态求和和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com