mysql count distinct case when_kylin使用复杂视图及复杂查询的问题(sum(case..条件判断...when) / count(distinct)...-程序员宅基地

技术标签: mysql count distinct case when  

现在有个指标是求各个年龄段的平均消费情况,我在hive中建立的视图如下,但感觉这样太麻烦,缺乏灵活性,在kylin中我测试了sum(case age>=14 and age< 18 then..)没有效果.

请问有什么更好的办法吗?(如果像下面这么建立的话,假如哪天一改需求的话,就太麻烦了)

```sql

CREATE VIEW v_summary_avg_amount_2016 AS

SELECT

tw.brand_id                                                             AS brand_id,

tw.trans_code                                                         AS trans_code,

tw.trans_date                                                          AS trans_date,

year(tw.trans_date) * 100 + month(tw.trans_date) AS trans_month,

-- 各年龄段的消费统计

-- 14~18岁的消费金额

CASE WHEN age >= 14 and age < 18 THEN(

CASE WHEN trans_code = '3001' THEN amount * coupon_consume_quantity WHEN trans_code IN ('0002', '2002', '1002') THEN amount END)

END AS **measure_by_age_14_18_amount**,

-- 18~25岁的消费金额

CASE WHEN age >= 18 and age < 25 THEN(

CASE WHEN trans_code = '3001' THEN amount * coupon_consume_quantity WHEN trans_code IN ('0002', '2002', '1002') THEN amount END)

END AS **measure_by_age_18_25_amount**,

-- 25~35岁的消费金额

CASE WHEN age >= 25 and age < 35 THEN(

CASE WHEN trans_code = '3001' THEN amount * coupon_consume_quantity WHEN trans_code IN ('0002', '2002', '1002') THEN amount END)

END AS **measure_by_age_25_35_amount**,

-- 35~45岁的消费金额

CASE WHEN age >= 35 and age < 45 THEN(

CASE WHEN trans_code = '3001' THEN amount * coupon_consume_quantity WHEN trans_code IN ('0002', '2002', '1002') THEN amount END)

END AS **measure_by_age_35_45_amount**,

-- 45~60岁的消费金额

CASE WHEN age >= 45 and age < 60 THEN(

CASE WHEN trans_code = '3001' THEN amount * coupon_consume_quantity WHEN trans_code IN ('0002', '2002', '1002') THEN amount END)

END AS **measure_by_age_45_60_amount**,

-- 60~80岁的消费金额

CASE WHEN age >= 60 and age < 80 THEN(

CASE WHEN trans_code = '3001' THEN amount * coupon_consume_quantity WHEN trans_code IN ('0002', '2002', '1002') THEN amount END)

END AS **measure_by_age_60_80_amount**,

-- 14~18岁的用户

-- 在kylin中再通过count(distinct measure_by_age_14_18_master_id)来求UV

CASE WHEN age >= 14 and age < 18 THEN master_id end AS **measure_by_age_14_18_master_id**,

CASE WHEN age >= 18 and age < 25 THEN master_id end AS **measure_by_age_18_25_master_id**,

CASE WHEN age >= 25 and age < 35 THEN master_id end AS **measure_by_age_25_35_master_id**,

CASE WHEN age >= 35 and age < 45 THEN master_id end AS **measure_by_age_35_45_master_id**,

CASE WHEN age >= 45 and age < 60 THEN master_id end AS **measure_by_age_45_60_master_id**,

CASE WHEN age >= 60 and age < 80 THEN master_id end AS **measure_by_age_60_80_master_id**

FROM bi.trans_water tw LEFT OUTER JOIN bi.membership mm

ON tw.membership_id=mm.id

AND tw.trans_year='2016' -- hive中的分区字段

WHERE trans_code IN ('0002','2002','1002','3001')

AND mm.join_date between '2016-01-01' and '2016-12-31';

```

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36462703/article/details/113906428

智能推荐

回顾2017,展望2018-程序员宅基地

文章浏览阅读62次。12月20日,距离2018不到2周的时间,时间流逝,而我仿佛还停留在过去,忘记了时间,迷茫,懵懂。这一年中似乎是在消耗,浪费,2016年春节过后,告别父母,我怀着比较复杂的心情再次来到陌生的上海,来的路上,看到那光彩耀人的霓虹灯,高大的摩天轮,一栋栋高楼大厦从眼前一晃而过,从乡村来的我好生羡慕,我期望着有一天能够站在高楼的顶端。今年一年我换了两处住房,由一种拆迁公寓搬到了小区住房,但这也并没有改变...

Visual Basic不可能消失-程序员宅基地

文章浏览阅读61次。转载VBGood作者:陶刚编译   近十年以来人们一直预言VisualBasic会消亡,但即使在VisualBasic.NET出现后,一切仍然没有发生变化。从最近的报道来看,VB.NET的未来受到了它的兄弟语言C#的挑战。即使过了这么多年,人们还是无法理解VB——以及现在的VB.NET——仍然是一种世界上最流行的编程语言。的确,某些VB程序员会转向C#、Java或Delphi,但...

flink-java版学习-5-keyBy+max/min等聚合函数_flink java keyby-程序员宅基地

文章浏览阅读1.2k次。keyBy:将Stream根据指定的Key进行分区,是根据key的散列值进行分区的(和sql的group by类似)max:对数据聚合,取最大值,非聚合字段,返回的是第一次的值maxBy:和max类似,但是在非聚合字段返回的是当前最大值package com.shihuo.apitest_transform;import com.shihuo.com.shihuo.apitest_beans.SensrReading;import org.apache.flink.api.common._flink java keyby

600个AI工具汇总第三讲,Poly,只需2分钟材质纹理AI一键生成_poly ai-程序员宅基地

文章浏览阅读323次。这是600多个人工智能AI工具汇总第三讲,今天介绍的AI小工具Poly,材质纹理AI一键生成,视频最后会告诉大家获取免费资源的方式。现在请大家同我一起进入AIGC的世界。Poly,用来生成纹理与人工智能在几秒钟内。创建无限的高分辨率、fully-custom commercially-licensed纹理只有一个文本提示。_poly ai

计算机专业研究生和本科生工资差距,本科生和研究生的工资差距,到底有多大?...-程序员宅基地

文章浏览阅读2.1k次。原标题:本科生和研究生的工资差距,到底有多大?对于在校的大三大四的同学们来说,他们有的正在经历着HR们的“筛选”,有的则奋战在实习单位中。简言之,每天都是在“投投投”简历和“等等等”结果的过程中“煎熬”着。然而,还有一些不知所措的同学,他们似乎还没有确定自己未来的方向,不知道本科毕业后是考研还是工作更适合他们。 不过,实质上来说,是这些同学们对本科与研究生薪资的不了解。那么,本科生和研究生毕业后工..._计算机研究生工资比本科生高多少

python鼠标键盘同时监听_python监听鼠标位置-程序员宅基地

文章浏览阅读697次。python鼠标键盘同时监听, 并记录数据到文本_python监听鼠标位置

随便推点

CSAPP lab2 二进制拆弹 binary bombs phase_4-程序员宅基地

文章浏览阅读566次。给出对应于7个阶段的7篇博客phase_1 https://www.cnblogs.com/wkfvawl/p/10632044.htmlphase_2 https://www.cnblogs.com/wkfvawl/p/10636214.htmlphase_3 https://www.cnblogs.com/wkfvawl/p/10651205.htmlphase_4 ht...

java newtonsoft.json_(转载)Newtonsoft.Json使用总结-程序员宅基地

文章浏览阅读749次。初识JSON.........................................................................................................................................2在ASP.NET中使用JSON............................................_java 能用newtonsoft.json吗

CSS 颜色代码大全 CSS颜色对照表_css 绿色-程序员宅基地

文章浏览阅读1.9w次,点赞11次,收藏89次。颜色对照表_css 绿色

c#获取字符串长度、字节长度_c# 获取字符串数组的实际长度-程序员宅基地

文章浏览阅读7.3k次。 string sendData = sendTextBox.Text; //复制发送数据 //添加结束符 sendData = sendData + "#$"; //字符串发送 if (hexadecimalSendCheckBox.IsChecked == fa..._c# 获取字符串数组的实际长度

薪酬管理系统的作用是什么?_薪资信息模块的意义是什么-程序员宅基地

文章浏览阅读488次。一个优秀的薪酬管理系统不但帮助企业提高人力资源管理,而且贯穿于企业战略管理、组织管理以及人力资源管理的各个环节,起着至关重要的作用,智能化薪酬管理系统在网络技术的应用及应用的广泛程度都已经发生了全新的变化和发展,成为了企业不可或缺的核心。_薪资信息模块的意义是什么

电子学会 青少年软件编程等级考试 C语言1级_中国电子学会c语言一级考试-程序员宅基地

文章浏览阅读1.2k次。电子学会 青少年软件编程等级考试 C语言1级_中国电子学会c语言一级考试

推荐文章

热门文章

相关标签