如何去求一个数据表属性列(boolea型)的值?并将其按大小排序?(100分)

  • 主题发起人 主题发起人 silverwolf
  • 开始时间 开始时间
S

silverwolf

Unregistered / Unconfirmed
GUEST, unregistred user!
例子:
a b c 结果 c b a
--------------------- ---------------------------
false true true true true false
true false true true false true
false true true ture true false
a列 false+true+false=0+1+0=1;
b列 为2
c列 为3

怎么实现呀?请教各位大侠。我希望有一种执行效率比较快的做法。
把表导入内存,做一张虚表,把false映射为0,true为1,然后计算的方法,
我这不太适应,因为这表就是放在内存,存boolean就是为了节省空间,如果在
转换过来,还不如我当初就用byte型来填表。
 
不知道你想要干什么,这样来折腾数据库,你能把你想要做的事情说清楚吗,
可能更改下数据结构更好,你想要做的事情,用现在的方式,没有什么好的方法,只能由程序处理
数据库无法自动处理。
 
这张表实际上是一个可识别矩阵,我得目的是通过它计算一个相对约简。
当然你可以把它看做一个0-1整数规划的矩阵求解。
求min(x1+x2+……xn)
它有型如X1+X2+……xk>=1
的n×(n-1)个约束条件
估计我是越说越乱,希望有点帮助吧。
 
其实你用真假来表示有什么用,不如直接用byte
boolean是不会节省字节的,不明白你为什么把本来简单的东西硬要用boolean来表示,
目的是为了节省空间,简直是本末倒置。
不过,我要告诉你的是,虽然在数据库中间字段属性是boolean
但是还是可以使用sum这个求和函数的,及
select sum(a),sum(b),sum(c) from ???
但是结果可能和数据库有关,例如在access中间,你上面例子的和是a=-1,b=-1,c=-3
可能有的数据库中间会变为a=1,b=2,c=3
相信有了这个和,你想要做的东西就简单很多了吧
 
谢谢biggo,能说说为什么数据库中boolean不会比byte省空间吗?
 
boolean类型在数据库中都是以一个字节表示的,
只是在某些数据库中间,例如微软的 Sql Server
如果在同一个表中间有多个boolean字段,才有可能优化成为用位来表示boolean类型
及一个字节表示最多8个字段,不过,你使用的数据库不一定提供这个功能。
何况现在是字节富裕时代,根本没有必要考虑这个浪费空间的得失。
 
谢谢指教。
这是个字节富裕的时代,但是在内存中至少导入1000000条记录还是得考虑一下的呀,
省起来数目可是惊人的呀。
 
biggo大侠,帮帮忙表中有一属性为byte型的字段,如何插入信息?
我搞不定呀。
 
问你一个问题,你的1000000个数据是拿来计算呢,还是用来显示??

我想你不会拿它来显示吧?
就算用来显示,也是把数据类型设置为数字型合理,
因为,你要把结果显示出来,如果是boolean型,还要做字符转换工作,
显示'false'和'true'占用的资源肯定比显示'0','1'要多吧。

如果只是拿来计算,如果是boolean型,不管是用位来存储还是字节来存储,
最终结果都要转换成字节的数字类型来计算,在内存中间,还是省不了空间,
所以假如用位来表示boolean类型,好处也就在存储在磁盘中间可能省点空间。
但对硬盘来说1000000条记录所占用的空间不算什么吧。

实际上你考虑的是内存中导入的数据空间大小,因为最终在内存中的boolean型数据
还是要占用一个字节(好象还没有哪种编程语言在内存中间boolean型变量是用位来表示的吧!),
所以,你的Boolean数据还是节省不了内存空间,最多节省下硬盘空间。

因此,你没有必要在这个环节在下工夫节省内存了,节不了的。
只要注意下能把字段数据在内存中间能以最小单位字节表示就已经可以了。

从另一个角度来说:
就算你能够把数据以位来表示,但你计算的时候还是要把一个字节中的八个位拆成8个字节来计算,
不可能直接在位上做加法运算。要实现这种计算,可能比你节省点空间,代价更大吧。

你的想法是好的,不过用错了地方,它和你定义字段的类型采用长整型还是短整型,
或者是定义采用100个字节的字符串还是采用50个字节的字符串节省空间的方法有本质的区别。

就此结帖吧!
 
听君一言,……。
再次感谢biggo
 
后退
顶部