1. 程式人生 > >oracle 行列統計轉換

oracle 行列統計轉換

抄來的沒有弄的很明白的:
  sign是一個對於寫分析SQL有很強大的功能
  下面對sign進行一些總結:
  但屬性student取0和1以外的值,或者student取兩個以上的標法值,問題就不會這麼簡單了
  解決辦法就是特徵函式(abs(),sign())
  
  常用的特徵演算法
  [A=B]=1-abs(sign(A-B))
  [A!=B]=abs(sign(A-B))
  [A<B]=1-sign(1+sign(A-B)) 不能用-sign(A-B):因為如果不滿足A  
    [A<=B]=sign(1-sign(A-B))
  [A>B]=1-sign(1-sign(A-B))
  [A>=B]=sign(1+sign(A-B)))
  [NOTα]=1-d[α]
  [αANDb ]=d[α]*d[b]
  [αOR b ]=sign(d[α]+d[b ])
  
  例如:
  A<B             Decode( Sign(A-B), -1, 1, 0 )
  A<=B            Decode( Sign(A-B), 1, 0, 1 )
  A>B             Decode( Sign(A-B), 1, 1, 0 )
  A>=B            Decode( Sign(A-B), -1, 0, 1 )
  A=B             Decode( A, B, 1, 0 )
  A between B and C        Decode( Sign(A-B), -1, 0, Decode(Sign(A-C), 1, 0, 1 ))
  A is null          Decode(A,null,1,0)
  A is not null        Decode(A,null,0,1)
    A in (B1,B2,...,Bn)        Decode(A,B1,1,B2,1,...,Bn,1,0)
  nor LogA          Decode( LogA, 0, 1, 0 )   
  LogA and LogB         LogA * LogB
  LogA or LogB         LogA + LogB
  LogA xor LogB         Decode(Sign(LogA),Sign(LogB),0,1)
 
  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
select * from grade1;
STUDENTID SUBJECTID MARK
--------- --------- ----
      101 A01         59
      101 A02         72
      101 A03         90
      102 A01         75
      102 A02         91
      103 A01         71