【发布时间】:2015-03-25 19:34:37
【问题描述】:
可能我遗漏了一些东西,但我仍然觉得奇怪,为什么不能在位字段上使用 max 和 min 聚合。所以如果我尝试做这样的事情:
declare @temp table (data bit)
insert into @temp
select 1 union all
select 0
select max(data) from @temp
我会收到一个错误 Operand data type bit is invalid for max operator. 但如果我这样做:
declare @temp table (data bit)
insert into @temp
select 1 union all
select 0
select top 1 * from @temp order by data desc
它工作正常,因此 SQL Server知道如何对位字段进行排序。但是订购数据的可能性意味着我们可以获得最大值或最小值。 那么这个限制背后的原因是什么?
【问题讨论】:
-
也许不是答案,但作为一种解决方法,您可以简单地使用
CAST(Data AS TINYINT),这应该足够了,不是吗? -
是的,我当然知道解决方法:) 但我想知道为什么会有这种限制。以及它如何影响索引行为
-
我想除了微软的人之外没有人知道原因。但根据this ticket 的说法,微软的唯一回答是“这是设计使然,我们没有任何计划在不久的将来在位列上实现聚合函数”
-
这可能是最初设计中的一个疏忽,现在他们没有触及这一点。 SQL 团队在 v2 之后很少改进功能,除非有充分的理由。 T-SQL 语言投资也接近于零。
-
bit数据类型有点精神分裂,因为它试图复制布尔值的一些语义。也许已经决定 MAX(true/false) 没有任何意义。但实际上它并不方便。
标签: sql sql-server