sql练习
我有两张表,一张是用户和卡的IDMapping表(客户ID,卡号),
另一张是客户近一个月的消费明细表(卡号,交易金额,交易时间等),
现在需要取出最近3笔消费都大于500的客户,给到业务发送短信,请问sql怎么写?
先把大于消费500的客户筛选出来,然后按照用户分组(group by),最后count(*)>=3,是这个意思吗?
select uid, rank over(parition by uid, order shijina desc ) num from xxxx where 金额 >=500 group uid having num>=3
我理解最近三笔 是连续的…
按消费时间排序 用 lead 或者lag 去取三条 再判断就可以了吧
sql练习
点击日志表:Tencent_video_click_online
包括字段:用户名vuid;日期date;时间time(unix时间戳)平台platfrom(移动端为21)
需求:已知同一个用户在移动端连续连词点击时间间隔不高于2秒 ,则可能为黑产行为,请筛选出21年3月所有有可能为黑产行为的点击记录
select vuid,time_unix,time_unix1 from
(select time_unix,lag(time_unix) over (partition by vuid order by time_unix) as time_unix1,vuid from tencent_video_click_online where date = ‘202103’ ) t where (time_unix1 - time_unix1) <= 2;
sql练习
长视频类型维度表:Tencent_video_cid_cate
包含字段:品类category(电视剧、电影);影片名称cid_nm;影片类型cate(存储形式为青春,武侠,悬疑等)
| 日期 | 品类 | 电影名称 | 类型
20210301 | 电视剧 | 陈情令 | 玄幻;古装
20210302 | 电影 | 长歌行 | 爱情;古代历史;武侠
需求:最新分区内所有影片类型为2中的专辑数
同一ID 下面null的用上面有的填充?
case when 当前为null or lag默认值的 then lag()的上次的 else 当前的
用户行为表tracking_log,大概字段有(user_id‘用户编号’,opr_id‘操作编号’,log_time‘操作时间’),示例数据如下:
user_id opr_id log_time
1001 A 2021-03-01 12:00:00
1001 B 2021-03-01 13:00:00
1002 A 2021-03-01 12:00:00
1003 A 2021-03-01 12:00:00
1003 C 2021-03-01 13:00:00
1004 A 2021-03-01 12:00:00
1004 B 2021-03-02 12:00:00
1004 A 2021-03-02 12:00:00
需求:
1)统计每天的访客数和他们的平均操作次数。
2)统计每天符合以下条件的用户数:A操作之后是B操作,AB操作必须相邻。
第一题avg() over
第二题还是lag 只不过是分组的时候,按user_id分组, 然后外面套一次,限制第一个是A 第二个是B
这个问题想咨询下大佬们 关于字符串或者日期类型过滤的问题
第一种
第二种涉及到字符串的计算。如果date是分区字段。那么sql执行的时候会全表扫描
数据表TableA结构为 shop_id,lon,lat,cnt(代表本店交易数),lon为经度,lat为维度
要求找到属于活跃商圈的shop_id.
活跃商圈指本shop周围n公里内,所有shop的平均cnt大于m.
距离可以用函数 distance(lon1,lat1,lon2,lat2)来计算
大佬们,可以问一下这个题怎么用sql写吗?
一文读懂SQL执行计划
https://mp.weixin.qq.com/s/8YG-FHrmufuzUJfcRlpi1g