我需要一个 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) 我有一个数据库,我在其中使用内联 TVF(表值函数)而不是视图。例如,我可能有两个名为 [汽车模型] 和 [汽车制造商] 的表,我在 TVF [fnCarBrands] 中将它们连接在一起。
这些 TVF 然后被其他 TVF 调用以进行进一步的处理和报告。所以我可能将我的函数 [fnCarBrands] 连接到表 [Purchase Year] 以形成一个函数 [fnCarBrandHistory]。对多层 TVF 依此类推。
我可能可以使用视图获得相同的功能,因为我的内联 TVF 实际上只是表和其他 TVF 的连接。
以这种方式编写的内联 TVF 的性能与视图相比如何?
我有一个这样的查询:
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
我有一个存储过程:
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) 现在我必须使用查询来获取文本文件中的命令。然后从中删除双引号。最后,在 psql shell 中运行该文件。
如何一步删除 PostgreSQL中的所有函数?
我有一个在十几个数据库中使用的函数。我希望这个函数只写一次就可以在所有数据库中访问,所以我想把这个函数写在 master 数据库中,以便我的函数可以轻松访问。
在master db中编写用户定义的函数有什么问题吗?
上网时,有人建议将功能转换为系统功能。(使用“EXEC sp_ms_marksystemobject 'fn_db_name'”)。
是否有必要将master db中创建的函数转换为系统函数?如果是,为什么?
我面临以下错误:
Run Code Online (Sandbox Code Playgroud)ERROR: functions in index expression must be marked IMMUTABLE
尝试创建这样的索引时:
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 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
我正在尝试调整在 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
是否可以重载 sql server 函数?是标量,如 ltrim,还是聚合函数,如计数?
即使这是一个非常非常糟糕的主意。是否可以?
有点重复T-SQL 用户定义的函数重载?我会说它不是 100% 重复,因为那是 2005 年的版本。也许这已经改变了?
functions ×10
sql-server ×4
performance ×3
postgresql ×3
aggregate ×1
datatypes ×1
dynamic-sql ×1
index ×1
mysql ×1
optimization ×1
view ×1