LoveUnix » ORACLE等数据库 » 学以致用: 我的短信话单分析
让LU留住您的每

一天 让LU博客留住您的每一天
2004-10-25 17:27 seven
<span style='color:red'>1. 准备:</span><br />1.1 短信清单,可以到移动网站查自己的短信话单,cp下来,利用editplus的纵列选择功能把短信号码那一栏取出来,保存为sms_details<br />1.2 建表:<br />1.2.1 短信清单表:<br />create table sms_details(sms_details varchar(11));<br />1.2.2 手机号码与姓名对应表<br />create table sms2name(phone varchar(11) not null primary key, name varchar(8));<br /><br /><span style='color:red'>2. 脚本</span><br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />#&#33;/usr/bin/ksh<br />db2 &#34;connect to db_name&#34; &#62; /dev/null 2&#62;&amp;1; #连接数据库 db_name为具体数据库名<br /><br />I=0 &amp;nbsp;#记录短信清单条数<br />J=0 &amp;nbsp;#记录成功插入数据库清单条数<br />K=0 &amp;nbsp;#记录插入失败记录条数<br /><br />echo &#34;请输入短信清单&#58;\c&#34;<br />read SMS_DETAILS<br />while read PHONE<br />do<br /> &nbsp; &nbsp; &nbsp; I=`expr $I + 1`<br /> &nbsp; &nbsp; &nbsp; db2 &#34;insert into sms_details values&#40;&#39;$PHONE&#39;&#41;&#34; &#62; /dev/null 2&#62;&amp;1; #插库<br /> &nbsp; &nbsp; if &#91; $? -eq 0 &#93;;then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;J=`expr $J + 1`<br /> &nbsp; &nbsp; &nbsp; else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;K=`expr $K + 1`<br /> &nbsp; &nbsp; &nbsp; fi<br />done &#60; $SMS_DETAILS<br /><br />echo &#34;共检索出 $I 条数据, 成功插入 $J 条数据, 插入失败 $K 条数据\n&#34;<br /><br />#开始分析数据,生成报表<br />#使用到的高级SQL&#58; CASE表达式, 左外连接<br />db2 -z report &#34;select sms_details as phone, case when a.sms_details=b.phone then b.name else concat &#40;&#39;unknow_&#39;, sms_details&#41; end as name, count&#40;a.sms_details&#41; as count from sms_details a left outer join sms2id b on a.sms_details=b.phone group by a.sms_details, b.phone, b.name&#34; &#62; /dev/null 2&#62;&amp;1;<br /><br />#删除短信清单<br />db2 &#34;delete from sms&#34; &#62; /dev/null 2&#62;&amp;1;<br /><br />db2 &#34;disconnect current&#34; &#62; /dev/null 2&#62;&amp;1; #断开数据库<br /><!--c2--></div><!--ec2--><br /><br /><span style='color:red'>3. 查看分析结果</span><br />more report<br /><br /><span style='color:red'>4. over啦~ <!--emo&:)--><img src='style_emoticons/default/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--></span><br /><br />现在知道每个月,和谁发的短信最多&#33; 谁是潜在的目标了  <!--emo&:P--><img src='style_emoticons/default/tongue.gif' border='0' style='vertical-align:middle' alt='tongue.gif' /><!--endemo--> <!--emo&:haha:--><img src='style_emoticons/default/haha.gif' border='0' style='vertical-align:middle' alt='haha.gif' /><!--endemo-->  <!--emo&^_^--><img src='style_emoticons/default/happy.gif' border='0' style='vertical-align:middle' alt='happy.gif' /><!--endemo--><br /><br />附:报表样色<br /><!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin--><br />PHONE&nbsp; &nbsp; &nbsp;  NAME&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  COUNT&nbsp; &nbsp; &nbsp; <br />----------- ------------------ -----------<br />137953**** aa&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 60<br />139147**** bb&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  120<br />139218**** cc&nbsp; &nbsp;  320<br /><!--QuoteEnd--></div><!--QuoteEEnd-->

2004-10-26 16:37 wildhorse
不错,呵呵,向你学习。

2004-10-29 20:40 无双
好啊 可以多用用<br /><br /><!--emo&:D--><img src='style_emoticons/default/laugh.gif' border='0' style='vertical-align:middle' alt='laugh.gif' /><!--endemo-->

2004-11-1 18:08 seven
<span style='color:red'>更新:</span><br />1. 修改sms2id表结构,添加type字段,做分类统计使用<br />2. 修改分析SQL语句<br />SQL解释:<br />2.1 value()函数是用来测试空值的,如为空用&#39;&#39;代替<br />2.2 使用group by 的grouping sets子句<br />2.3 统计使用了聚集和钻取,由group by grouping sets((a.sms_details, b.type, b.phone, b.name),(b.type), ())语句来实现<br />3. 最后用order by b.type, a.sms_details, b.name来增强报表的可读性<br /><br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />db2 &#34;select value&#40;a.sms_details,&#39;&#39;&#41; as 电话号码, value&#40;case when a.sms_details=b.phone then b.name else concat &#40;&#39;unknow_&#39;, a.sms_details&#41; end,&#39;&#39;&#41; as 姓名, value&#40;b.type,&#39;&#39;&#41; as 类别 , count&#40;a.phoneno&#41; as 统计 from sms_details a left outer join sms2id b on a.sms_details=b.phone group by grouping sets&#40;&#40;a.sms_details, b.type, b.phone, b.name&#41;,&#40;b.type&#41;, &#40;&#41;&#41; order by b.type, a.sms_details, b.name&#34;<br /><!--c2--></div><!--ec2--><br /><br />附报表样色:<br /><!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->电话号码&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&nbsp; 姓名&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&nbsp; 类别&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&nbsp; 统计<br />-----------&amp;nbsp; ------------------&amp;nbsp; &amp;nbsp; &amp;nbsp;&nbsp; ---------- -----------<br />139518***** TT&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&nbsp; 好友&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 4<br />222333***** AA&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 好友&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 2<br />&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; <span style='color:red'>好友&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&nbsp; 6</span><br />139147***** unknow_139147*****&amp;nbsp; &amp;nbsp;&nbsp; 其他&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 1<br />&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; <span style='color:red'>其他&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&nbsp; 1</span><br />111223***** BB&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 亲戚&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 2<br />139211***** JJ&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 亲戚&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 3<br />222333***** CC&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 亲戚&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 1<br />&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; <span style='color:red'>亲戚&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&nbsp; 6</span><br />&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&nbsp; <span style='color:blue'>13</span><br /><!--QuoteEnd--></div><!--QuoteEEnd--><br />红色为小类统计<br />蓝色为总统计

2004-11-2 09:35 燕狂徒
支持原创,加精华

2004-11-15 17:07 jnnxjj
嘿嘿,我不用统计也知道自己每月给谁发的短信最多

2004-11-15 17:23 seven
呵呵,其实,这个贴我是抛出一个话题,<br /><br />DW,BI的东东,用到一些olap的函数<br /><br />其实也就是olap报表的应用开发,而不是真的为了分析我的短线话单 <!--emo&:blush:--><img src='style_emoticons/default/blush.gif' border='0' style='vertical-align:middle' alt='blush.gif' /><!--endemo--> <br /><br /><br />这个才是我真的的意图,可惜,响应的人不多<br />

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.