with /*SELECT 2 as lev, 1.0 as powerunion all select     3,1.9,union all select     4,2.5, ...
*/
-- lev_info 这段sql 等价于上面,另一种实现而已
lev_info as(SELECT * from UNNEST(ARRAY<STRUCT<lev INT64, power FLOAT64>>[(1, 1),
(2, 1.4), (3, 1.9), (4, 2.5), (5, 3.2), (6, 4), (7, 4.9), (8, 5.9), (9, 7), (10, 8.2), (11, 9.5)])),
-- 元组的第二个是兵的战斗力army_info as (
select army_id, freq, -- 这里是对兵的等级进行分类,黑道中,最高是11级兵
CASE WHEN army_id < 12050001 then mod(army_id, 100) else DIV((mod(army_id, 100) - 1), 3) + 1 end as lev from(
select army_id, count(*) as freq from `mafia1_ods.game_log_army` --提取最近7天的数据,然后对兵的等级进行聚合,统计频率
where timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
group by army_id
order by freq desc)),
army_freq as(          --将士兵按照种类进行分类相加
select * except(freq), sum(freq) over(partition by merge_id) as freq from(--        连接字符串        切割字符串                这个mergeid 就是兵的种类 1 是暴徒,二是飞车党
select army_info.army_id as table_id, CONCAT('army@', SUBSTR(CAST(army_id as STRING), 0, 4)) as merge_id, freq,lev_info.power as exchange_val, 1 as use_log from army_info left join lev_info on army_info.lev = lev_info.lev
)),charge_item as(
select item_id from `recommend_algorithm.v_mafia1_charge_item`),-- 统计聚合每个table id 在七天之内的数量
item_freq_count as(
select table_id as item_id, count(*) as freq from mafia1_ods.game_log_item
where timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) and table_id in (select item_id from charge_item)
group by table_id),-- 这张表是和 item_info 相交
item_map as(select t1.*, t2.* except(id) from(
select charge_item.item_id, IFNULL(item_freq_count.freq, 0) as freq from
charge_item left join item_freq_count on charge_item.item_id = item_freq_count.item_id) as t1
left join (select id, type, type_config, para1, para2, exchange_val from mafia1_dmd.item_info) as t2 on t1.item_id = t2.id),item_freq as(
select * except(exchange_val, min_exchange, max_exchange), exchange_val/min_exchange as exchange_val,CAST(max_exchange/min_exchange >= 10 as int64) as use_log from(select * except(freq), sum(freq) over(partition by merge_id) as freq, min(exchange_val) over(partition by merge_id) as min_exchange,max(exchange_val) over(partition by merge_id) as max_exchange,from(--这里的是对字段进行合并,个人认为这种说法值得商榷select item_id as table_id, CASE WHEN type in (2, 3) then format('item@%d@%d@%s',type, type_config, CASE WHEN type = 2 then CAST(para1 as STRING) else '' end) else format('item@%d', item_id) end as merge_id, freq,  CAST(CASE WHEN type in (2, 3) then exchange_val else 1 end as int64) as exchange_val,                                                                                                   from item_map))
order by freq desc)select *, DENSE_RANK() over(order by freq desc, merge_id) as map_id from(
select * from army_freq union all select table_id, merge_id, exchange_val, use_log, freq from item_freq)
order by map_id

sql item_map相关推荐

  1. java 必备面试必备

    1.JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含 ...

  2. 数据预处理 参考sql

    with-- 读取exchange 表 ,里面包含item 和 us_price等信息 exchange as( select * from `heidao-market.recommend_algo ...

  3. sql特殊字符转义,oracle中将字符 ‘ 转义

    oracle中使用sql语句或多或少地会遇到使用特殊字符,比如" ' ",这时,这个单引号就会与前面的单引号匹配,将文本从中间断开,引发问题和错误.这就需要我们进行转义. 而ora ...

  4. weblogic项目java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配 at oracle.jdbc.....错误解决

    原因:数据源配置时间格式问题 解决方案: 1.进入weblogic控制台 2.左侧菜单栏选择Service- JDBC- Data Source 3.选择你的数据源,然后进入Configuration ...

  5. 如何定位并优化慢查询Sql

    根据慢日志定位慢查询SQL. 查询慢日志相关变量,并进行设置: 主要关注下述三个变量: long_query_time.show_query_log_file.show_query_log 慢查询sq ...

  6. Go 学习笔记(55)— Go 标准库 sql (初始化数据库、插入、更新、删除数据库表、单行查询、多行查询、事务处理)

    1. 标准库说明 Go 的标准库中是没有数据库驱动,只提供了驱动接口,有很多第三方实现了驱动,我们这里选择 go-sql-driver 这个实现是目前使用最多的.github 地址是:https:// ...

  7. SQL与NoSQL的区别 以MySQL与MongoDB为例

    异同对比 1.语言和结构层面 SQL数据库,是基于表的,并且用结构化语言也就是SQL来定义和操纵数据.一方面,这是非常强大的:SQL是最通用和最广泛使用的选项之一,使其成为一个安全的选择,尤其适用于复 ...

  8. 【Sql Server】数据库的3大服务

    在数据库SQL SERVER中,处理常用的sql server数据库引擎,还有其他3大服务,分别是集成服务,报表服务,分析服务. 集成服务商可以配置包,这里的包可以理解是数据库引擎里的用户数据库.可以 ...

  9. 【Sql Server】DateBase-自动化

    强大的SQL Server有着神奇的自动化功能,来处理一些人为处理不了的事情! 自动化功能:T-sql语言,系统命令.脚本语言.复制命令.创建角色.索引重建.报表 管理元素:作业.警报.操作员.计划 ...

最新文章

  1. C语言素数的乘积,判断一个正整数是否有两个素数的乘积
  2. 为什么NLP相对来说这么困难?
  3. 10、Java Swing JComboBox:下拉列表组件
  4. 怎么说呢。留个纪念,关于字符串的重载
  5. python函数理解,python对函数的理解
  6. 几种常见的集成触发器(D、T、JK)
  7. Flutter AnimatedBuilder 的基本使用
  8. 有关计算机利弊的英语作文,急需一篇有关电脑优缺点的作文(英文的)
  9. hdu3949(线性基,求第k小的异或和
  10. A/B test模块使用以及配置
  11. 多层陶瓷电容器用处_元器件用法:多层陶瓷电容器的用途
  12. 孙鑫VC学习笔记:第十七讲 (三) 用命名管道实现进程间的通信
  13. python模板匹配_python实现模板匹配
  14. 2016年软件评测师真题精选
  15. 【面试官说实现一个顺序表,但听到要求后我沉默了】
  16. 解决windows 中python打开文本文档乱码问题
  17. Android 12 灭屏流程(一) Power键灭屏
  18. HTML实例—以一个简单网页为例
  19. Java实现json报文的比对(不考虑内部顺序 + 可设置跳过部分字段比对)
  20. xml文件中空格输入

热门文章

  1. 我思故我在之编程规范及编程思想篇
  2. 对Java单例模式 volatile关键字作用的理解
  3. 做小程序费用太高?帮你选一个最省钱的方案
  4. [Oracle] CPU/PSU补丁安装详细教程
  5. 5.3多线程条件变量
  6. 光缆连接头符号缩写详解
  7. php从内存中获取源码_【PHP7源码分析】PHP内存管理
  8. 《剑指offer》c++版本 6.从尾到头打印链表
  9. android 事件管理器,Android输入管理InputManager之读一次事件的流程
  10. bdd行为驱动开发 java_行为驱动开发(BDD)如何与领域驱动设计(DDD)结合?