1
9
问: 如何在group by子句中使用别名 一种方法是使用内联视图。[编辑]雷姆斯·鲁萨诺的回答(+1!)给出了一个实现相同操作的公共表表达式的示例。[/编辑] 内联视图为复杂表达式提供一个简单的“别名”,然后可以在外部查询的group by子句中引用该表达式:
我们把它打开。
这足以回答你的问题。如果要查找等效替换表达式,则 泰克布鲁斯 ( + 1! )是正确的答案(它适用于边界和非整数。) 从tekblues(+1!):
(这应该足以回答您的问题。) [更新:]sample 用户定义函数 (替换内联case表达式)
笔记: 请注意,用户定义的函数将增加开销,并且(当然)添加对另一个数据库对象的依赖关系。
这个示例函数等价于原始表达式。op case表达式没有任何间隙,但它引用了每个“断点”两次,我更喜欢只测试下限。(条件满足时返回case。反向执行测试可以让未处理的情况(<=0或NULL)在没有测试的情况下通过,并且
其他详细信息 (一定要检查性能和优化器计划,以确保它与原始计划相同(或不明显比原始计划差)。在过去,我在将谓词推送到内联视图中时遇到了一些问题,在您的情况下,这看起来并不是一个问题。) 存储视图 请注意 内联的 视图也可以存储为数据库中的视图定义。但是除了从语句中“隐藏”复杂的表达式之外,没有理由这样做。 简化复杂表达式 使复杂表达式“简单”的另一种方法是使用用户定义的函数。但是,用户定义的函数本身就有一组问题(包括性能下降)。 添加数据库“查找”表
有些答案建议向数据库中添加“查阅”表。我不认为这真的是必要的。当然可以这样做,如果你想得到不同的值
通过联接到“lookup”表,一个好处是只需对“lookup”表执行DML操作,查询就可以返回不同的结果集。 但同样的优势实际上也可能是缺点。 如果收益大于弊,请仔细考虑。考虑新表对单元测试的影响,如何验证查找表的内容是否有效且未更改(是否有重叠)?有什么差距吗?)对代码持续维护的影响(由于额外的复杂性)。 一些重大假设
这里给出的许多答案似乎都假定
演示以下内容非常简单:
是 不是 相当于
|
2
9
你有什么理由不使用
等。。。
编辑:或者,在使用浮动的情况下,
|
3
5
案件可以这样写:
不需要HAVING,将其替换为“where callDuration>0” 我喜欢前面给出的翻译表答案!那是最好的解决办法 |
4
4
您需要将案例进一步推下查询树,以便GroupBy可以看到其投影。这可以通过两种方式实现:
这两种解决方案在各个方面都是等效的。我发现CTE更具可读性,有些人更喜欢派生表,因为它更易于移植。 |
5
2
分
注意
更新:
|
6
1
|
7
1
未经测试的:
|
8
1
将所有事例添加到表变量中并执行外部联接
|
9
1
这是我的照片。您需要的所有组件都可以用直接的SQL来完成。
这是我用来测试的SQL。 (我没有自己的callmetbl;)
SQL输出如下所示,每个持续时间(bucket)1到12统计2条记录。
下面是“foo”子查询的结果:
干杯。 |
10
1
这里的用户定义函数有什么问题?您可以从视觉上清理代码并以这种方式集中功能。从性能上看,我看不出打击太可怕,除非你做了一些真正的弱智在说自卫队。 |
11
1
为创建查阅表格
下面是查找表的最终结果。
这是查找台。
|
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
SoT · SQL Server中求和函数的工作方式 2 年前 |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |