从左关联到数据维度的思考

开始于同事提的问题

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

相关文章
相关标签/搜索