标签: functions

如何创建用户定义的聚合函数?

我需要一个 MySQL 不提供的聚合函数。

我希望它具有 MySQL 的 SQL 风格(即,不是在 C 中)。

我该怎么做呢?我所坚持的是创建一个聚合函数——文档似乎没有提到这是如何完成的。

product函数的期望用法示例:

mysql> select product(col) as a from `table`;
+------+
| a    |
+------+
|  144 |
+------+
1 row in set (0.00 sec)

mysql> select col, product(col) as a from `table` group by col;
+-----+------+
| col | a    |
+-----+------+
|   6 |   36 |
|   4 |    4 |
+-----+------+
2 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

mysql aggregate functions

9
推荐指数
3
解决办法
1万
查看次数

Inline-TVF 的性能 vs. 视图

我有一个数据库,我在其中使用内联 TVF(表值函数)而不是视图。例如,我可能有两个名为 [汽车模型] 和 [汽车制造商] 的表,我在 TVF [fnCarBrands] 中将它们连接在一起。

这些 TVF 然后被其他 TVF 调用以进行进一步的处理和报告。所以我可能将我的函数 [fnCarBrands] 连接到表 [Purchase Year] 以形成一个函数 [fnCarBrandHistory]。对多层 TVF 依此类推。

我可能可以使用视图获得相同的功能,因为我的内联 TVF 实际上只是表和其他 TVF 的连接。

以这种方式编写的内联 TVF 的性能与视图相比如何?

performance sql-server-2005 view functions

9
推荐指数
1
解决办法
3990
查看次数

SentryOne Plan Explorer 是否计算 UDF 中的读取次数?

我有一个这样的查询:

select dbo.fn_complexFunction(t.id)
from mytable t
Run Code Online (Sandbox Code Playgroud)

SQL Sentry Plan Explorer 中,我注意到我必须运行 Get Estimated Plan 才能使查询计划包含 UDF。

运行“获取实际计划”时,逻辑读取和其他指标似乎不包括 UDF 中发生的操作。在这种情况下,使用 Profiler 是唯一的解决方法吗?

sql-server-2008 sql-server execution-plan functions query-performance

9
推荐指数
1
解决办法
690
查看次数

是否可以在存储过程中定义函数?

我有一个存储过程:

create proc sp_MyProc(@calcType tinyint) as
begin
    -- some stuff collating data into #MyTempTable

    if (@calcType = 1) -- sum
        select A, B, C, CalcField = sum(Amount) 
        from #MyTempTable t 
        join AnotherTable a on t.Field1 = a.Field1;
        group by A, B, C
    else if (@calcType = 2) -- average
        select A, B, C, CalcField = avg(Amount) 
        from #MyTempTable t 
        join AnotherTable a on t.Field1 = a.Field1;
        group by A, B, C
    else if (@calcType = 3) -- some other fancy …
Run Code Online (Sandbox Code Playgroud)

stored-procedures sql-server-2012 functions

9
推荐指数
2
解决办法
3万
查看次数

如何删除我在 PostgreSQL 中的所有函数?

现在我必须使用查询来获取文本文件中的命令。然后从中删除双引号。最后,在 psql shell 中运行该文件。

如何一步删除 PostgreSQL中的所有函数?

postgresql dynamic-sql functions

9
推荐指数
2
解决办法
1万
查看次数

主数据库中的用户定义函数 (UDF)

我有一个在十几个数据库中使用的函数。我希望这个函数只写一次就可以在所有数据库中访问,所以我想把这个函数写在 master 数据库中,以便我的函数可以轻松访问。

在master db中编写用户定义的函数有什么问题吗?

上网时,有人建议将功能转换为系统功能。(使用“EXEC sp_ms_marksystemobject 'fn_db_name'”)。

是否有必要将master db中创建的函数转换为系统函数?如果是,为什么?

sql-server sql-server-2008-r2 functions

9
推荐指数
2
解决办法
3684
查看次数

INDEX 中使用的 CONCAT 导致错误:索引表达式中的函数必须标记为 IMMUTABLE

我面临以下错误:

ERROR:  functions in index expression must be marked IMMUTABLE
Run Code Online (Sandbox Code Playgroud)

尝试创建这样的索引时:

CREATE INDEX full_phone_number ON orders_clientphone (concat(area_code, phone));
Run Code Online (Sandbox Code Playgroud)

另一方面,当使用替代语法进行连接时:

CREATE INDEX full_phone_number ON orders_clientphone ((area_code || phone));
Run Code Online (Sandbox Code Playgroud)

Postgres 对此非常满意。
两列都定义为character varying(256)

postgresql index datatypes functions postgresql-9.4

9
推荐指数
1
解决办法
4979
查看次数

为什么集合返回函数 (SRF) 在 FROM 子句中运行得更慢?

这是一个数据库内部问题。我正在使用 PostgreSQL 9.5,我想知道为什么设置返回函数 (SRF),也称为表值函数 (TVF) 在FROM子句中运行得更慢,例如当我执行这些命令时,

CREATE TABLE foo AS SELECT * FROM generate_series(1,1e7);
SELECT 10000000
Time: 5573.574 ms
Run Code Online (Sandbox Code Playgroud)

总是比,慢得多

CREATE TABLE foo AS SELECT generate_series(1,1e7);
SELECT 10000000
Time: 4622.567 ms
Run Code Online (Sandbox Code Playgroud)

是否有一个通用规则可以在这里制定,以便我们应该始终FROM子句之外运行 Set-Returning Functions ?

postgresql performance database-internals functions set-returning-functions

8
推荐指数
1
解决办法
483
查看次数

在查询中的多列上调用相同表值函数的最有效方法

我正在尝试调整在 20 列上调用相同表值函数 (TVF) 的查询。

我做的第一件事是将标量函数转换为内联表值函数。

是否使用性能CROSS APPLY最佳的方式在查询中的多个列上执行相同的函数?

一个简单的例子:

SELECT   Col1 = A.val
        ,Col2 = B.val
        ,Col3 = C.val
        --do the same for other 17 columns
        ,Col21
        ,Col22
        ,Col23
FROM t
CROSS APPLY
    dbo.function1(Col1) A
CROSS APPLY
    dbo.function1(Col2) B
CROSS APPLY
    dbo.function1(Col3) C
--do the same for other 17 columns
Run Code Online (Sandbox Code Playgroud)

有更好的选择吗?

可以在针对 X 个列的多个查询中调用相同的函数。

这是函数:

CREATE FUNCTION dbo.ConvertAmountVerified_TVF
(
    @amt VARCHAR(60)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
    WITH cteLastChar
    AS(
        SELECT LastChar = RIGHT(RTRIM(@amt), 1)
    ) …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization functions sql-server-2016 query-performance

8
推荐指数
1
解决办法
6661
查看次数

是否可以重载 SQL Server 函数?

是否可以重载 sql server 函数?是标量,如 ltrim,还是聚合函数,如计数?

即使这是一个非常非常糟糕的主意。是否可以?

有点重复T-SQL 用户定义的函数重载?我会说它不是 100% 重复,因为那是 2005 年的版本。也许这已经改变了?

sql-server functions

8
推荐指数
1
解决办法
2536
查看次数