從左關聯到數據維度的思考

開始於同事提的問題

SELECT     A.code,
       ..........
       A.C_VALUE1     CVALUE1,
       A.C_VALUE2     CVALUE2,
       B.C_VALUE3     CVALUE3
  from (select t.code,
               t.c_value1,
               to_char(wm_concat(t.c_value2)) c_value2
          from t_ext t
         where t.c_data_type = 'RELA'
         group by t.code, t.c_value1) a
  left join t_ext b
    on a.code = b.code
   and a.c_value1 = b.c_value1
   and b.c_data_type = 'RELA'

同事針對上面SQL提出問題:html

原本數據庫是一個c_port_code 一個 c_value1 一個 c_value2存的,
如今想按照把 同一個 c_port_code 和 c_value1 的 c_value2合併爲新的c_value2,
可是不想把c_value3和d_date放到分組裏面,又須要這兩個字段的值,致使重複數據了,該怎麼去重呀sql

分析後回覆以下:

在a 的結果集,用了group by ,其實至關於將表「降維」了。假如原來1000行,如今分組後結果集變爲100行了。
在b 的結果集,沒用group by ,它仍是原來的維度。
當它們left join時,確定會再擴展回來呀,升維成爲1000行。數據庫

再解釋一下維度:
好比 商品表是一維表,
     商品名稱: 價格,產地,類別,備註echarts

商品日銷售表是二維表:
     商品名稱,日期:  購買人,購買數量,結帳口......spa

若是你對「商品日銷售表" group by 一下。  就至關於降維,體如今主鍵列減小了
      商品名稱 :   總購買數量.net

前面你讓兩個維度不一樣的表進行join,確定引發某個表的擴展呀!設計

最後解決:

  同事說他寫了2個SQL來獲取結果。code

後續:

不少系統都會設計一個數據源的模塊,每每止於」取到結果集「,其實拿到結果集只是第一步,更重要的是要反應出來結果集的行間的一個關係來。比較重要就是主鍵列,維度這些概念。htm

ORACLE自己也有維度的概念,我尚未把維度的概念理解透了,它直接關係着數據的彙總效率,數據視圖的」上鑽、下鑽「,在echart裏有上鑽下鑽功能,我不太清楚它是怎麼維護數據關係的,有時間了要研究一下。blog

待研究的連接:

Oracle Dimension  

http://blog.csdn.net/wanghai__/article/details/6609193

Echarts文檔:

http://echarts.baidu.com/option.html#series-line.dimensions

相關文章
相關標籤/搜索