`
herman_liu76
  • 浏览: 96897 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

仅用SQL得到的复杂统计数据的例子

    博客分类:
  • sql
sql 
阅读更多
    正好前不仅和朋友交流数据统计技术,就想写一个关于我如何进行统计的文章。在我们的一般的信息化项目中有这么几大块技术点:

    1.后台J2EE技术架构。实际变化不大,多数时候用一个架构多年可以不变,加上脚手架代码,所以通常没有难度,也无法进一步提高工作效率。
    2.前台技术。用的比较杂,多是基于jquery的框架,现在尽量用Bootstrap吧,easyUi也用,普通的jsp也用,多数情况最好用一套技术就行,除了有时候比较陌生,要查资料外,也无法进一步提高效率。
    3.业务开发与设计,这个方面由于每个项目都不尽相同,多数情况下靠个人能力,重点是能用好流程处理技术,分析好主对象表,从对表表,业务基础表,业务数据表这些关系。这两方面,之前有写过分析的文章了。
    4.统计是客户通常用的重要功能,一般我不认为这个技术上很重要,所以没太关注。后来看到很多统计都弄的很复杂,都是简单的查询,再返回复杂的对象在jvm中处理,花了不少时间在上面,觉得有必要针对这方面写一下,帮助开发人员提高工作效率。

   特点:几乎都用纯SQL实现复杂的统计功能。常用的sql函数有:group by, case when, group_concat(mysql)/listagg(oralce),decode, distinct,having 等。

   一、以具体示例表介绍,表之间的关系如下:

    1.一个学生表


    2.一个学生的奖惩情况表

    3.关系说明  学生表是主表,奖惩情况是从表,有一个FK是主表的PK,就是STUDENT_ID。很简单。从表也可以是多张表,比如每个学生的考试通过情况,每个学生参与班级活动的情况等等。很多统计表是把这些混合在一起的。

    二、第一类统计,每个学生的各种情况分类统计汇总
    特点是,表格的一行是主表的一个对象。
1.


2.


3.


4.


5.一从表的多列统计


6.


7.多从表的情况



    三、第二类统计,某个分类的各种分类统计汇总
    特点是,表格是一行是主表对象的其中一个分类的汇总。

1.


2.


3.用left join进行统计


4.


5.从多个left join处理多个从表的统计


6.不用left join,我个人尝试出来的统计方式。主表的字段组合用INSTR函数后,用于从表统计。



    最后提一下最近碰到的需求,是要在一组里面随机抽取,按说group后里如果有一个random的函数就好了。但是没有,我的做法还是group_concat或者LISTAGG()取出这个字段后,外部程序用‘'’分割成数组,再从里面随机取一个值。

    四、总结
    有些统计的分类是从字典表中得,或者直接用字典表,通过在jvm中循环拼接出来超长的sql,曾经生成过的sql超过2000字符也有。尽量使用SQL,充分利用了数据库本身的能力,虽然多,但不乱,非常的简单。可以节省很多开发时间。

  • 大小: 12.6 KB
  • 大小: 22 KB
  • 大小: 21 KB
  • 大小: 23.9 KB
  • 大小: 29.7 KB
  • 大小: 34.2 KB
  • 大小: 33.5 KB
  • 大小: 46.7 KB
  • 大小: 55.9 KB
  • 大小: 18.1 KB
  • 大小: 23.2 KB
  • 大小: 36.2 KB
  • 大小: 58 KB
  • 大小: 81.6 KB
  • 大小: 74.2 KB
分享到:
评论

相关推荐

    经典SQL脚本大全

    │ │ 6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(定义各汇总列标题).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序及汇总列标题处理...

    Sqlserver2000经典脚本

    类别自动生成编号示例.sql │ 自已做标识列的例子.sql │ 触发器自动维护已用&未用编号.sql │ 连续编号.sql │ 防止重复的示例.sql │ 项目编号=各项目独立流水号&各年不同.sql │ ...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    Microsoft+SQL+Server+2008技术内幕:T-SQL查询_源代码及附录 中文版

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    C#.net_经典编程例子400个

    81 实例068 在ListView控件中对数据排序或统计 83 实例069 在ListView控件中绘制底纹 84 实例070 在列表视图中拖动视图项 85 实例071 用ListView控件选取整行数据 88 实例072 用ListView...

    Spark大型项目实战:电商用户行为分析大数据平台开发实战

    然后使用Oozie进行离线统计任务的定时调度,使用Zeppeline进行数据可视化的报表展示.该模块可以让企业管理层看到公司售卖的 商品的整体情况,从而对公司的商品相关的战略进行调螫.主要使用Spark SQL实现。 4、广告...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY的功能 277 10.4.1 LEVEL伪列 278 10.4.2 SYS_CONNECT_BY_PATH函数 279 10.4.3 CONNECT_BY_ROOT...

    SQL性能优化

     其次,看是否用上正确的索引了,特别复杂的 SQL 语句,当其中 where 子句包含多个带有索引的字段时,更应该注意索引的选择是否合理。错误的索引不仅不会带来性能的提高,相反往往导致性能的降低。  针对如何用...

    SQL语法大全

    3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like \'%字段值%\' order by 字段名 [desc]" ...

    thinkphp中多表查询中防止数据重复的sql语句(必看)

    库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。 select *, count(distinct name) from table group by name 结果: id name count(distinct name) 1 a 1 2 b 1 3 c 1 最后一 项是多余的,不用管...

    orcale常用命令

    如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句: SQL>select * from dictionary where instr(comments,'index')>0; 如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句:...

    Toad 使用快速入门

    使用Toad,我们可以通过一个图形化的用户界面快速访问数据库,完成复杂的SQL和PL/SQL代码编辑和测试工作。Toad由Oracle开发专家专门为开发人员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境。 Toad 主要...

Global site tag (gtag.js) - Google Analytics