O
昨天基本上把手上的数据提取需求和月报任务做的差不多了,今天开始来怼开发任务。从一开始的阅读需求就遇到了很多问题,比如交叉赠费、预存款、AB端号码之类的,在以前的工作中没有接触过,咨询导师她也不了解,于是我们又请教了计费室的师父才磕磕碰碰地搞清楚了具体内容。到下午快5点的时候,才差不多完成脚本的编写,这相当于一个草稿吧,周一再接着去改成格式规范的程序。
R
在编写脚本的时候,请教了导师几个让我不得其解的问题,老师向我解释了含义及原因后说我的想法想的好可爱,让我不禁感到一丝尴尬和对自己的无语。
I
今天记录的问题主要包括查询列中的重复/非重复项、wm_concat()函数以及关联字段的注意事项,具体内容如下:
1.查询列中的重复/非重复项
在平时写脚本时,update数据时经常会遇到错误提示:单行子查询返回多个行这种情况,此时我们就需要先分析为什么会出现这种情况。比如对于受理信息这个字段,从营业厅实习的经历可知,往往用户在营业厅办理业务时一个订单中经常会同时包含多个业务,因此在update受理信息时就会出现上述错误情况。如果想查询某一列中的重复或者非重复项,可以通过以下语句实现:
查找重复项:
select column_name,count(1) from table_name group by column_name having count(column_name)>1
这条语句利用了group by函数与count()函数,group by函数将列中不同的内容进行分组,再统计计数大于1的组,则可以查出该列中的重复项。这个语句虽然很简单,但是能够在出错时帮助我们分析原因。
查找非重复项:
select column_name,count(1) from table_name group by column_name having count(column_name)=1
与上述语句的解释类似,当计数等于1时表明该组内容在列中无重复。
2.wm_concat()函数
通过1中的方法,我们可以找出“单行子查询返回多个行”的原因,但对于类似受理信息这样的字段,我们需要了解用户在受理时所办理的全部业务信息,因此需要在一个列中显示所有的内容,这时就可以用到wm_concat()函数。其具体的语法及操作如下:
wm_concat(column_name) 把列值以","分隔起来,并显示成一行
其中column_name为我们需要进行内容转置的列名。例如对于同一订单号下办理的所有业务,利用该函数可以显示为图1所示结果,而不是分多行显示。
3.关于关联字段
我们在日常的工作中,使用的数据表和字段不计其数,当我们按照需求人的要求进行数据提取时经常也会关联不同数据表中的不同字段。今天遇到一个小问题,比如我在两张表中关联了两个列名相同的数据,结果查询不到任何结果。当我百思不得其解时,导师刚好经过,于是我向她请教,她马上就指出了我的问题。虽然都是create_date(受理时间),在在定价表里表示的是受理某种定价的时间,而在订单表里面表示的创建该订单的时间,二者除了字段名相同毫无任何关联,因此利用这两个字段进行匹配必然是得不到结果的。因此平时我们不能只是机械化地进行工作,有时候需要考虑事务的内在逻辑与联系,这样才能较好地完成工作。
D
下周一完成这个开发需求的程序编写,继续在工作中及时记录重难点问题或需要向他人请教的问题。