• SQL With cube


    闲来写下with cube的用法
    cube运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。
    先看下表:


    我们以id聚合查询出平均分

    这一条SQL语句与上面唯一不同之处即为多了后面的 with cube,而结果却是比前面更多了一条结果,它同样是按类ID的平均分,不同是又多了最后一个结果null 4,这个是什么呢,我们来看第一段,with cube 是 包含所有可能的组合,我们根据ID分,它帮我们按ID查出平均总,同时再帮我们计算出所有的平均分,即该表ID为1与2 的平均分。这个我们可以在很多地方应用,如按性别统计工资,按部门统计业绩……
    其实实际中,我们往往就得到更准确的数据,即~上面结果应该以小数形式为好~其实上面结果也是不准确的,SQL将其四舍五入了~
    我们式式办法~

    我们发现有了,有了小数,但再细心一看,结果是不对的,这样SQL相当于就将前一步的操作结果转换成小数,直接在4后面加了二个0,这显示不对,那么SQL为什么会这样,我们又如何解决,其实在表voteDetails中,我们的voteNum字段为int型,那么当我们以avg(voteNum)计算时,SQL就会以voteNum的数据类型计算,也即为int,所以操作结果为int型,会四舍五入,这样虽然我们cast(avg(voteNum) as decimal(20,2)),但也仅仅是将avg计算之后的整形转换为decimail(20,2)保留二位小数。
    知道这个原理,我们就好办了!在avg计算之前将数据类型转换。如下尝试:

    得到预期结果,小数不是二位没关系,我们可以 在avg计算后的结果再转换一次,保留二们小数!
  • 相关阅读:
    Serverless:这真的是未来吗?(二)
    阿里云 EDAS 3.0 助力唱鸭提升微服务幸福感
    520,一份给程序员的“硬核”脱单秘籍
    稳定性之故障应急处理流程
    殷浩详解DDD:领域层设计规范
    Vineyard 加入 CNCF Sandbox,将继续瞄准云原生大数据分析领域
    【开通指南】 实时计算 Flink 全托管版本
    【HTML】html5 canvas全屏烟花动画特效
    【HTML】中国天气天气插件调用
    【Python】求n!
  • 原文地址:https://www.cnblogs.com/eflylab/p/794260.html
Copyright © 2020-2023  润新知