精华内容
下载资源
问答
  • 、AVG()求平均值注意AVE()忽略NULL值,而不是将其作为“0”参与计算二、COUNT()两种用法1、COUNT(*)对表行数进行计数不管是否有NULL2、COUNT(字段名)对特定列数据的行进行计数忽略NULL值三、MAX()、MIN()求...

    一、AVG()

    求平均值
    注意AVE()忽略NULL值,而不是将其作为“0”参与计算
     

     
    二、COUNT()

     
    两种用法
     
    1、COUNT(*)

    对表中行数进行计数
    不管是否有NULL
     

    2、COUNT(字段名)

    对特定列有数据的行进行计数
    忽略NULL值
     
     

    三、MAX()、MIN()

    求最大、最小值

    都忽略NULL
     
     

    四、SUM()


    可以对单个列求和,也可以对多个列运算后求和

    忽略NULL值,且当对多个列运算求和时,如果运算的列中任意一列的值为NULL,则忽略这行的记录。

    例如: SUM(A+B+C),A、B、C 为三列,如果某行记录中A列值为NULL,则不统计这行。
     
     

    参考资料:

    SQL中AVG、COUNT、SUM、MAX等聚合函数对NULL值的处理

    http://www.studyofnet.com/news/1219.html

    转载于:https://www.cnblogs.com/longlyseul/p/9887844.html

    展开全文
  • 一、AVG() 求平均值 注意AVE()忽略NULL值,而不是将其作为“0”参与计算 二、COUNT() 两种用法 1、COUNT(*) ...对特定列有数据的行进行计数 ...忽略NULL值,且当多个列运算求和时,如果运算的列中任意一列的值...

    一、AVG()

    求平均值

    注意AVE()忽略NULL值,而不是将其作为“0”参与计算

    二、COUNT()

    两种用法

    1、COUNT(*)

    对表中行数进行计数

    不管是否有NULL

    2、COUNT(字段名)

    对特定列有数据的行进行计数

    忽略NULL值

    三、SUM()

    可以对单个列求和,也可以对多个列运算后求和

    忽略NULL值,且当对多个列运算求和时,如果运算的列中任意一列的值为NULL,则忽略这行的记录。

    例如: SUM(A+B+C),A、B、C 为三列,如果某行记录中A列值为NULL,则不统计这行

    展开全文
  • 数据透视表是聚合的特定形式,我们可以在其中应用排序,求平均值或求和之类的操作,也可以对列值进行分组。 在本文,我将展示如何在不编写SQL的情况下就可以从纯Java数据库计算数据的数据透视表。 您可以...

    java导出数据透视表

    来自数据库行和表的原始数据不能为人类读者提供太多了解。 相反,如果我们对数据执行某种聚合,则人类更有可能看到数据模式
    在向我们展示之前。 数据透视表是聚合的一种特定形式,我们可以在其中应用排序,求平均值或求和之类的操作,也可以对列值进行分组。

    在本文中,我将展示如何在不编写SQL的情况下就可以从纯Java数据库中计算数据的数据透视表。 您可以轻松地重用和修改本文中的示例,以满足您自己的特定需求。

    在以下示例中,我使用了开源Speedment (它是Java Stream ORM)和MySQL的开源Sakila电影数据库内容。 Speedment适用于任何主要的关系数据库类型,例如MySQL,PostgreSQL,Oracle,MariaDB,Microsoft SQL Server,DB2,AS400等。

    旋转

    我将构造一个MapActor对象,并为每个Actor ,相应的List电影,一个特殊的电影分级的Actor出现在这里是为特定的枢轴如何进入一个例子。 Actor可能看起来像口头上表示:

    “约翰·多伊(John Doe)参加了9部评级为'PG-13'的电影和4部评级为'R'的电影”。

    我们将计算数据库中所有参与者的枢轴值。 Sakila数据库具有此特定应用程序感兴趣的三个表:

    1)“电影”包含所有电影以及如何评价电影(例如“ PG-13”,“ R”等)。
    2)包含(组成)演员的“演员”(例如“ MICHAEL BOLGER”,“ LAURA BRODY”等)。
    3)“电影演员”,以多对多的关系将电影和演员联系在一起。

    解决方案的第一部分涉及将这三个表连接在一起。 联接是使用Speedment的JoinComponent创建的,可以通过以下方式获得:

    // Visit https://github.com/speedment/speedment
    // to see how a Speedment app is created. It is easy!
    Speedment app = …;
    
    JoinComponent joinComponent = app.getOrThrow(JoinComponent.class);

    一旦有了JoinComponent ,就可以开始定义计算关系表所需的Join关系:

    Join<Tuple3<FilmActor, Film, Actor>> join = joinComponent
            .from(FilmActorManager.IDENTIFIER)
            .innerJoinOn(Film.FILM_ID).equal(FilmActor.FILM_ID)
            .innerJoinOn(Actor.ACTOR_ID).equal(FilmActor.ACTOR_ID)
            .build(Tuples::of);

    build()采用方法引用Tuples::of ,该方法引用将解析为采用三个类型的实体的构造函数。 FilmActorFilmActor ,这将创建一个包含这些特定实体的复合不可变Tuple3 元组内置于Speedment中。

    有了Join对象,我们现在可以使用从Joi​​n对象获得的标准Java Stream创建数据透视图:

    Map<Actor, Map<String, Long>> pivot = join.stream()
        .collect(
            groupingBy(
                // Applies Actor as a first classifier
                Tuple3::get2,
                groupingBy(
                    // Applies rating as second level classifier
                    tu -> tu.get1().getRating().get(),
                    counting() // Counts the elements 
                    )
                )
            );

    现在已经计算了枢轴Map ,我们可以像这样打印其内容:

    // pivot keys: Actor, values: Map<String, Long>
    pivot.forEach((k, v) -> { 
        System.out.format(
            "%22s  %5s %n",
            k.getFirstName() + " " + k.getLastName(),
            V
        );
    });

    这将产生以下输出:

    MICHAEL BOLGER  {PG-13=9, R=3, NC-17=6, PG=4, G=8} 
               LAURA BRODY  {PG-13=8, R=3, NC-17=6, PG=6, G=3} 
         CAMERON ZELLWEGER  {PG-13=8, R=2, NC-17=3, PG=15, G=5}
    ...

    任务完成! 在上面的代码中,方法Tuple3::get2将从元组( Actor )中检索第三个元素,而方法tu.get1()将从元组( Film )中检索第二个元素。

    Speedment将自动从Java渲染SQL代码,并将结果转换为Java Stream。 如果启用流日志记录,我们可以确切看到如何呈现SQL:

    SELECT 
        A.`actor_id`,A.`film_id`,A.`last_update`, 
        B.`film_id`,B.`title`,B.`description`,
        B.`release_year`,B.`language_id`,B.`original_language_id`,
        B.`rental_duration`,B.`rental_rate`,B.`length`,
        B.`replacement_cost`,B.`rating`,B.`special_features`,
        B.`last_update`, C.`actor_id`,C.`first_name`,
        C.`last_name`,C.`last_update`
    FROM 
        `sakila`.`film_actor` AS A
    INNER JOIN 
        `sakila`.`film` AS B ON (B.`film_id` = A.`film_id`) 
    INNER JOIN 
        `sakila`.`actor` AS C ON (C.`actor_id` = A.`actor_id`)

    加入自定义元组

    正如我们在上面的示例中所注意到的,由于在连接阶段仅将FilmActor对象用于将FilmActor实体链接在一起,因此我们在Stream中没有实际使用FilmActor对象。 此外,通用Tuple3有一般get0() get1()get2()是没有说他们装的是什么东西的方法。

    所有这些都可以通过定义我们自己的称为ActorRating的自定义“元组”来ActorRating如下所示:

    private static class ActorRating {
        private final Actor actor;
        private final String rating;
    
        public ActorRating(FilmActor fa, Film film, Actor actor) {
            // fa is not used. See below why
            this.actor = actor;
            this.rating = film.getRating().get();
        }
    
        public Actor actor() {
            return actor;
        }
    
        public String rating() {
            return rating;
        }
    
    }

    当使用build()方法build() Join对象时,我们可以提供一个自定义构造函数,该构造函数要应用于数据库的传入实体。 这是我们将要使用的功能,如下所示:

    Join<ActorRating> join = joinComponent
        .from(FilmActorManager.IDENTIFIER)
        .innerJoinOn(Film.FILM_ID).equal(FilmActor.FILM_ID)
        .innerJoinOn(Actor.ACTOR_ID).equal(FilmActor.ACTOR_ID)
        .build(ActorRating::new); // Use a custom constructor
    
    Map<Actor, Map<String, Long>> pivot = join.stream()
        .collect(
            groupingBy(
                ActorRating::actor,
                groupingBy(
                    ActorRating::rating,
                    counting()
                )
             )
        );

    在此示例中,我们证明了带有构造函数的类(方法参考ActorRating:new被解析为new ActorRating(fa, actor, film) ),该FilmActor函数只是完全丢弃了链接的FilmActor对象。 该类还为其属性提供了更好的名称,这使代码更具可读性。 带有自定义ActorRating类的解决方案将产生与第一个示例完全相同的输出结果,但使用时看起来要好得多。 我认为在大多数情况下,与使用通用元组相比,编写自定义元组值得付出额外的精力。

    使用平行旋转

    Speedment的一件很酷的事情是,它支持开箱即用的Stream方法parallel() 因此,如果您的服务器具有许多CPU,则在运行数据库查询和联接时可以利用所有这些CPU内核。 这就是并行枢轴的样子:

    Map<Actor, Map<String, Long>> pivot = join.stream()
        .parallel()  // Make our Stream parallel
        .collect(
            groupingBy(
                ActorRating::actor,
                groupingBy(
                    ActorRating::rating,
                    counting()
                )
             )
        );

    我们只需要添加一行代码即可进行并行聚合。 当我们达到1024个元素时,将启动默认的并行拆分策略。 因此,并行枢转将仅在大于此值的表或联接上进行。 应该注意的是,Sakila数据库仅包含1000部影片,因此我们必须在更大的数据库上运行代码才能真正受益于并行性。

    试试看!

    在本文中,我们展示了如何在不编写任何SQL代码的情况下,就可以使用Java从数据库计算数据透视表。 访问GitHub上的 Speedment开源以了解更多信息。

    《用户指南》中阅读有关其他功能的更多信息。

    翻译自: https://www.javacodegeeks.com/2018/05/making-pivot-tables-with-java-streams-from-databases.html

    java导出数据透视表

    展开全文
  • 数据透视表是聚合的特定形式,我们可以在其中应用排序,求平均值或求和之类的操作,也可以经常对列值进行分组。 在本文,我将展示如何在不编写SQL的情况下从纯Java计算数据库的数据透视表。 您可以轻松地...

    来自数据库行和表的原始数据不能为人类读者提供太多了解。 相反,如果我们对数据执行某种聚合,则人类更有可能看到数据模式在向我们展示之前。 数据透视表是聚合的一种特定形式,我们可以在其中应用排序,求平均值或求和之类的操作,也可以经常对列值进行分组。

    在本文中,我将展示如何在不编写SQL的情况下从纯Java中计算数据库的数据透视表。 您可以轻松地重用和修改本文中的示例,以满足您自己的特定需求。

    在下面的示例中,我使用了开源Speedment (它是Java Stream ORM)和MySQL的开源Sakila电影数据库内容。 Speedment适用于任何主要的关系数据库类型,例如MySQL,PostgreSQL,Oracle,MariaDB,Microsoft SQL Server,DB2,AS400等。

    旋转

    我将构造一个MapActor对象,并为每个Actor ,相应的List电影,一个特殊的电影分级的Actor出现在这里是为特定的枢轴如何进入一个例子。 Actor可能看起来像口头上表示:

    “约翰·多伊(John Doe)参加了9部评级为'PG-13'的电影和4部评级为'R'的电影”。

    我们将计算数据库中所有参与者的枢轴值。 Sakila数据库具有此特定应用程序感兴趣的三个表:

    1)“电影”包含所有电影以及如何评价电影(例如“ PG-13”,“ R”等)。2)包含(组成)演员的“演员”(例如“ MICHAEL BOLGER”,“ LAURA BRODY”等)。3)“电影演员”,以多对多的关系将电影和演员联系在一起。

    解决方案的第一部分涉及将这三个表连接在一起。 联接是使用Speedment的JoinComponent创建的,可以通过以下方式获得:

    // Visit https://github.com/speedment/speedment
    // to see how a Speedment app is created. It is easy!
    Speedment app = …;
    
    JoinComponent joinComponent = app.getOrThrow(JoinComponent.class);

    一旦有了JoinComponent ,就可以开始定义计算关系表所需的Join关系:

    Join<Tuple3<FilmActor, Film, Actor>> join = joinComponent
            .from(FilmActorManager.IDENTIFIER)
            .innerJoinOn(Film.FILM_ID).equal(FilmActor.FILM_ID)
            .innerJoinOn(Actor.ACTOR_ID).equal(FilmActor.ACTOR_ID)
            .build(Tuples::of);

    build()采用方法引用Tuples::of ,该方法引用将解析为采用三个类型的实体的构造函数。 FilmActorFilmActor ,这将创建一个包含这些特定实体的复合不可变Tuple3 元组内置于Speedment中。

    有了Join对象,我们现在可以使用从Joi​​n对象获得的标准Java Stream创建数据透视图:

    Map<Actor, Map<String, Long>> pivot = join.stream()
        .collect(
            groupingBy(
                // Applies Actor as a first classifier
                Tuple3::get2,
                groupingBy(
                    // Applies rating as second level classifier
                    tu -> tu.get1().getRating().get(),
                    counting() // Counts the elements 
                    )
                )
            );

    现在已经计算了枢轴Map ,我们可以像这样打印其内容:

    // pivot keys: Actor, values: Map<String, Long>
    pivot.forEach((k, v) -> { 
        System.out.format(
            "%22s  %5s %n",
            k.getFirstName() + " " + k.getLastName(),
            V
        );
    });

    这将产生以下输出:

    MICHAEL BOLGER  {PG-13=9, R=3, NC-17=6, PG=4, G=8} 
               LAURA BRODY  {PG-13=8, R=3, NC-17=6, PG=6, G=3} 
         CAMERON ZELLWEGER  {PG-13=8, R=2, NC-17=3, PG=15, G=5}
    ...

    任务完成! 在上面的代码中, Tuple3::get2方法将从元组( Actor )中检索第三个元素,而tu.get1()方法将从元组( Film )中检索第二个元素。

    Speedment将自动从Java渲染SQL代码,并将结果转换为Java Stream。 如果启用流日志记录,我们可以确切地看到SQL的呈现方式:

    SELECT 
        A.`actor_id`,A.`film_id`,A.`last_update`, 
        B.`film_id`,B.`title`,B.`description`,
        B.`release_year`,B.`language_id`,B.`original_language_id`,
        B.`rental_duration`,B.`rental_rate`,B.`length`,
        B.`replacement_cost`,B.`rating`,B.`special_features`,
        B.`last_update`, C.`actor_id`,C.`first_name`,
        C.`last_name`,C.`last_update`
    FROM 
        `sakila`.`film_actor` AS A
    INNER JOIN 
        `sakila`.`film` AS B ON (B.`film_id` = A.`film_id`) 
    INNER JOIN 
        `sakila`.`actor` AS C ON (C.`actor_id` = A.`actor_id`)

    加入自定义元组

    正如我们在上面的示例中注意到的那样,由于在连接阶段仅将FilmActor对象用于将FilmActor实体链接在一起,因此在Stream中没有实际使用FilmActor对象。 此外,通用Tuple3有一般get0() get1()get2()是没有说他们装的是什么东西的方法。

    所有这些都可以通过定义我们自己的自定义“元组”(称为ActorRating如下所示:

    private static class ActorRating {
        private final Actor actor;
        private final String rating;
    
        public ActorRating(FilmActor fa, Film film, Actor actor) {
            // fa is not used. See below why
            this.actor = actor;
            this.rating = film.getRating().get();
        }
    
        public Actor actor() {
            return actor;
        }
    
        public String rating() {
            return rating;
        }
    
    }

    当使用build()方法build() Join对象时,我们可以提供一个自定义构造函数,该构造函数要应用于数据库的传入实体。 这是我们将要使用的功能,如下所示:

    Join<ActorRating> join = joinComponent
        .from(FilmActorManager.IDENTIFIER)
        .innerJoinOn(Film.FILM_ID).equal(FilmActor.FILM_ID)
        .innerJoinOn(Actor.ACTOR_ID).equal(FilmActor.ACTOR_ID)
        .build(ActorRating::new); // Use a custom constructor
    
    Map<Actor, Map<String, Long>> pivot = join.stream()
        .collect(
            groupingBy(
                ActorRating::actor,
                groupingBy(
                    ActorRating::rating,
                    counting()
                )
             )
        );

    在此示例中,我们证明了带有构造函数的类(方法参考ActorRating:new解析为new ActorRating(fa, actor, film) ),该FilmActor函数完全丢弃了链接的FilmActor对象。 该类还为其属性提供了更好的名称,这使代码更具可读性。 使用自定义ActorRating类的解决方案将产生与第一个示例完全相同的输出结果,但使用时看起来要好得多。 我认为在大多数情况下,与使用通用元组相比,编写自定义元组值得付出额外的精力。

    使用平行旋转

    Speedment的一件很酷的事情是,它开箱即用地支持Stream方法parallel() 因此,如果您的服务器具有许多CPU,则在运行数据库查询和联接时可以利用所有这些CPU内核。 这就是并行枢轴的样子:

    Map<Actor, Map<String, Long>> pivot = join.stream()
        .parallel()  // Make our Stream parallel
        .collect(
            groupingBy(
                ActorRating::actor,
                groupingBy(
                    ActorRating::rating,
                    counting()
                )
             )
        );

    我们只需添加一行代码即可进行并行聚合。 当我们达到1024个元素时,将启动默认的并行拆分策略。 因此,并行枢转将仅在大于此值的表或联接上进行。 应该注意的是,Sakila数据库仅包含1000部电影,因此我们必须在更大的数据库上运行代码才能真正受益于并行性。

    旋转一下吧!

    在本文中,我们展示了如何在不编写任何SQL代码的情况下,就可以使用Java从数据库计算数据透视表。 访问GitHub上的Speedment开源以了解更多信息。

    《用户指南》中阅读有关其他功能的更多信息。

    翻译自: https://www.javacodegeeks.com/2018/05/making-pivot-tables-with-java-streams-from-databases.html

    展开全文
  • 、AVG()求平均值注意AVE()忽略NULL值,而不是将其作为“0”参与计算 二、COUNT() 两种用法 1、COUNT(*)对表行数进行计数不管是否有NULL 2、COUNT(字段名)对特定列数据的行进行计数忽略NULL值三、SUM()可以...
  • 数据结构题

    2012-12-27 16:58:40
    1.已知个65列的稀疏矩阵中非零元的值分别为:9,41,6,8,-54,5和-8,它们在矩阵中的列号依次为:1,4,5,1,2,4和5,其行值依次为1,1,2,2,3和5。请写出该稀疏矩阵。 2.已知二叉树树T先序遍历序列为...
  • 对一列中的文字统一去掉最后一个字 讨如何去掉单元格中的第一个数字? 论一下取最后一个单词的方法 如何去掉单元格最后一位数字 如何在一列已经输入的数据前添加“p” 什么函数可以插入字符 如何在数据前添加“*”号...
  • R语言经典实例(+英)

    热门讨论 2014-12-03 18:46:15
     5.17 从矩阵选定一一列 132  5.18 用列数据初始化数据框 133  5.19 由行数据初始化数据框 134  5.20 添加数据框 136  5.21 预分配数据框 137  5.22 根据位置选择数据列 138  5.23 根据列名...
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    对一列中的文字统一去掉最后一个字 讨如何去掉单元格中的第一个数字? 论一下取最后一个单词的方法 如何去掉单元格最后一位数字 如何在一列已经输入的数据前添加“p” 什么函数可以插入字符 如何在数据前添加“*”号...
  • 实例068 ListView控件间的数据移动 87 实例069 将数据库数据添加到ListView控件 90 实例070 在ListView控件实现修改功能 91 实例071 在ListView控件中对数据排序或统计 92 实例072 在ListView控件绘制...
  • 014 汇总鼠标所在列中大于7500生产量 54 015 计算售价10元以下、销量200以上商品总利润 56 016 统计销量300以上竹盐系列产品总利润 57 017 计算满足一定条件的一、二级教师工作量之差 58 018 汇总...
  • LINGO软件学习

    2009-08-08 22:36:50
    LINGO是用来求解线性和非线性优化问题简易工具。LINGO内置了种建立最优化模型语言,可以简便地表达大规模问题,利用LINGO高效求解器可快速求解并分析结果。...个对象列中至多有个集名,而属性...
  • SQL语法大全

    2014-03-30 11:00:11
    AVG(字段名) 得出个表格栏平均值 COUNT(*|字段名) 数据行数的统计或栏有值的数据行数统计 MAX(字段名) 取得个表格栏最大的值 MIN(字段名) 取得个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用...
  • 实例068 在ListView控件中对数据排序或统计 83 实例069 在ListView控件绘制底纹 84 实例070 在列表视图拖动视图项 85 实例071 用ListView控件选取整行数据 88 实例072 用ListView控件开发登录界面 89 ...
  • 1.7.2 定位特定类型的数据 33 1.7.3 追踪单元格之间的关系 33 1.7.4 监视单元格内容 35 1.7.5 使用公式求值器 36 1.8 处理公式的错误 36 1.8.1 括号不匹配 37 1.8.2 单元格被#符号填满 37 1.8.3 空白但...
  • 实例229 用First或Last求数据条或最后条 7.11 多表查询(连接查询) 实例230 多表连接查询 实例231 在连接查询使用表别名 实例232 使用UNION关键字合并多个结果集 7.12 嵌套查询 实例233 简单...
  • (29)某公司在传输数据过程为了安全要对数据进行加密,若传递是四位整数,其进行加密规则为:每位数字都加上5,然后用和除以10余数代替该数字,再将第位和第四位交换,第二位和第三位交换。...
  • 实例127 修改所有行中的一列 227 实例128 修改数据时使用子查询 228 实例129 修改数据时使用内连接 230 实例130 在修改数据时使用函数 231 3.23 删除数据 232 实例131 用DELETE子句删除部分数据 232 实例132...
  • 实例127 修改所有行中的一列 227 实例128 修改数据时使用子查询 228 实例129 修改数据时使用内连接 230 实例130 在修改数据时使用函数 231 3.23 删除数据 232 实例131 用DELETE子句删除部分数据 232 实例132...
  • EXCEL集成工具箱V6.0

    2010-09-11 01:44:37
    【综合计算显示】 综合计算并显示选中区域存储格最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含数字、字符、汉字个数等信息。 【GB2转BIG5】 将选中区域存储格简体...
  • 实例088 利用AVG函数实现计算平均值 实例089 利用MIN函数求数据中的最小数据 实例090 应用MAX函数求数据中的最大值 实例091 COUNT函数销售额大于某值图书种类 实例092 查询与张静同天入司员工信息 实例...
  • (4)avg:求平均值 求每个部门工资平均值 [sql] view plain copy select EMP_DEP,avg(EMP_SALARY) from EMPLOYEES group by EMP_DEP; (5)count:求总行数 求每个部门工资大于一定金额人数 [sql] view ...
  • 【综合计算显示】 综合计算并显示选中区域存储格最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含数字、字符、汉字个数等信息。 【GB2转BIG5】 将选中区域存储格简体字...
  • 2009达内SQL学习笔记

    2010-02-10 19:46:58
    检索返回数据的顺序没有特殊意义,为了明确地排序用 SELECT 语句检索出的数据,可使用 ORDER BY 子句。 ORDER BY 子句取个或多个的名字。 空值,按无穷大处理(升序,空值排最后;降序排最前)。 1、...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    8. 下列哪个函数可以把一个列中的所有相加求和? ( B ) A MAX B. SUM C. COUNT D. AVG 9. 下列哪个子句是SELECT语句中必选项?( A ) A. FROM B.WHERE C.HAVING D. ORDER BY 10. 下列哪个子句实现对一个结果集进行...

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

对一列中特定行的数据求平均值