【数据分析面试】53.推送消息的分布情况(SQL)

在这里插入图片描述

题目

我们有两个表,一个是 notification_deliveries 表,另一个是包含 created 和购买 conversion datesusers 表。如果用户没有购买,那么 conversion_date 列为 NULL

编写一个查询,以获取用户转换前的推送通知总数的分布情况。

示例:

输入:

notification_deliveries

列名类型
notificationVARCHAR
user_idINTEGER
created_atDATETIME

users

列名类型
idINTEGER
created_atDATETIME
conversion_dateDATETIME

输出:

列名类型
total_pushesINTEGER
frequencyINTEGER

答案

解题思路

如果查看用户转换前收到的推送通知总数的分布情况,最终的结果应该看起来像下面这样:

total_pushes | frequency
-------------+----------
    0        |  100
    1        |  250
    2        |  300
   ...       |  ...

购买前收到消息次数为0的用户人数有100个, 购买前接受了1次消息的有250人,接收了2次消息的用户有300人……

我们需要获取用户转换前推送通知的总数分布,可以考虑以下几点:

  1. 在两个表之间根据 user_id 字段进行连接。
  2. 排除所有未转换的用户。
  3. conversion_date 设置为大于 notification_deliveries 表中的 created_at 值,以获取发送给用户的所有通知。

我们知道这是一个 LEFT JOIN,以确保包含那些在没有任何推送通知的情况下转换的用户。

我们可以先计算每个用户的通知数量,然后按该数量分组,以获取总体分布。

答案代码

下面是实现该需求的SQL查询:

SELECT total_pushes, COUNT(*) AS frequency
FROM (
    SELECT u.id, COUNT(nd.notification) as total_pushes
    FROM users AS u
    LEFT JOIN notification_deliveries AS nd
        ON u.id = nd.user_id
            AND u.conversion_date >= nd.created_at
    WHERE u.conversion_date IS NOT NULL
    GROUP BY 1
) AS pushes
GROUP BY 1
  • LEFT JOIN: 确保即使用户没有收到任何推送通知也能被包含在内。
  • u.conversion_date >= nd.created_at: 确保只计算在用户转换之前发送的通知。
  • COUNT(nd.notification): 计算每个用户在转换前收到的通知数量。
  • GROUP BY: 对每个用户计算的通知数量进行分组,然后对这些分组进行频率统计。

通过以上查询,可以得到每个用户在转换前收到的推送通知总数的分布情况。

更多详细答案可关注公众号查阅。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/642538.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51 单片机[4]:数码管显示

目标: 一次显示一个数字:在数码管第三位显示6.同时显示多个不同数字:在数码管前三位分别显示1, 2, 3. 一、认识数码管 LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件…

零拷贝(Zero-Copy)

1.背景 现在有这样一个场景,我们需要在本地选择一个文件后,然后上传到网络上。 我们再看看文件的内容数据的具体搬运过程: 你会发现,在整个文件搬运的过程中,发生了多次的数据拷贝和上下文转换。 4次数据拷贝&#…

amis 联动效果触发的几种方式

联动效果实现主要俩种方式: 1.表达式实现联动,基于组件内或数据链的变量变化的联动 比如: "source": "/amis/api/mock2/options/level2?name${name} " (必须是这种字符串拼接形式,在data数据映射中表达式不会触发联动) 所有初始化接口链…

【Linux】中的常见的重要指令(中)

目录 一、man指令 二、cp指令 三、cat指令 四、mv指令 五、more指令 六、less指令 七、head指令 八、tail指令 一、man指令 Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: m…

【Spring Boot】深度复盘在开发搜索引擎项目中重难点的整理,以及遇到的困难和总结

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring Boot】深度复盘在开发搜索引擎项目中重难点的整理,以及遇到的困难和总结 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 什么是搜索引…

基于SpringBoot+Vue的人事管理系统

引言 目前,人事管理的系统大都是CS架构的大型系统,很少有面向机关,事业单位内部的基于BS架构的微型人事系统,因此.开发一个基于BS架构的人事信息管理系统是非常必要的.但是基于BS架构的人事系统对于安全是一个大的考验点.在人事信息系统中,功能需简单清晰,可操作性强,其次安全…

站在ESG“20+”新起点上,看中国ESG先锋探索力量

全链减碳、建设绿色工厂、打造零碳产品、守护生物多样性、向受灾群众捐助……不知你是否察觉,自“双碳”目标提出以来,一股“可持续发展热潮”正覆盖各行各业,并且渗透到我们衣食住行的方方面面。在资本市场,ESG投资热潮更是席卷全…

外汇天眼:风险预警!以下平台监管牌照被撤销!

监管信息早知道!外汇天眼将每周定期公布监管牌照状态发生变化的交易商,以供投资者参考,规避投资风险。如果平台天眼评分过高,建议投资者谨慎选择,因为在外汇天眼评分高不代表平台没问题! 以下是监管牌照发生…

Leetcode | 5-21| 每日一题

2769. 找出最大的可达成数字 考点: 暴力 数学式子计算 思维 题解 通过式子推导: 第一想法是二分确定区间在区间内进行查找是否符合条件的, 本题最关键的便是 条件确定 , 第二种方法: 一般是通过数学公式推导的,这种题目我称为数学式编程题 代码 条件判断式 class Solution { …

ViT:1 从DETR说起

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技…

探索微软Edge开发者工具:优化前端开发的艺术与科学

探索微软Edge开发者工具:优化前端开发的艺术与科学 引言:Edge开发者工具概览一、基础操作:步入DevTools的大门1.1 启动与界面布局1.2 快速导航与定制 二、元素审查与样式调整2.1 精准元素选取2.2 实时CSS编辑2.3 自动完成与内联文档 三、Java…

Spring Web MVC(2)

响应 Http响应的结果可以是数据也可以是静态页面可以针对响应设置状态码 Header信息 返回静态页面注解RestController和Controller 我们创建一个前端页面 package com.example.demo.demos.web.controller;import org.springframework.web.bind.annotation.RequestMapping; i…

【C++】<图形库> 三人成棋(面向对象写法)

目录 一、游戏需求 二、程序架构 三、代码实现 四、实现效果 五、已知BUG 一、游戏需求 构建一个五子棋游戏,在自定义棋盘宽度和高度的基础上,实现三人对战功能,并且能判定谁输谁赢。 二、程序架构 (1) 对象分析: 【1】 需…

Kata Containers零基础学习从零到一

文章目录 docker和Kata Containers的区别Docker容器共享宿主机内核每个容器实例运行在轻量级虚拟机(MicroVM)总结 通俗例子Kata Containers架构实际Kata Containers架构图解容器技术栈总结 agent和shim家长(shim进程)的角色保姆&a…

【开源】多语言大型语言模型的革新:百亿参数模型超越千亿参数性能

大型人工智能模型,尤其是那些拥有千亿参数的模型,因其出色的商业应用表现而受到市场的青睐。但是,直接通过API使用这些模型可能会带来数据泄露的风险,尤其是当模型提供商如OpenAI等可能涉及数据隐私问题时。私有部署虽然是一个解决…

【CSP CCF记录】201909-1 小明种苹果

题目 过程 #include<bits/stdc.h> using namespace std; int N,M; long long tree[1010]; int main() {cin>>N>>M;long long result0,max0;//result剩余苹果&#xff0c;max最大疏果个数 int id0;//id最大疏果的果树编号 for(int i1;i<N;i){long long b0…

手把手一起学习Python NumPy

NumPy 是用于处理数组的 python 库&#xff0c;NumPy 中的数组对象称为 ndarray&#xff0c;它提供了许多支持函数&#xff0c;使得利用 ndarray 非常容易。Numpy官方网址 NumPy 安装 使用pip安装NumPy 模块&#xff1a; pip install numpyNumPy 入门 创建numpy数组&#x…

Qt 在windows下显示中文

Qt在windows平台上显示中文&#xff0c;简直是一门玄学&#xff0c;经过测试&#xff0c;有如下发现&#xff1a; 1&#xff0c; 环境&#xff1a;Qt 5.15.2 vs2019 64位 win11系统 默认用Qt 创建的文件使用utf-8编码格式&#xff0c;此环境下 中文没有问题 ui->textE…

当面试官问出“Unsafe”类时,我就知道这场面试废了,祖坟都能给你问出来!

一、写在开头 依稀记得多年以前的一场面试中&#xff0c;面试官从Java并发编程问到了锁&#xff0c;从锁问到了原子性&#xff0c;从原子性问到了Atomic类库&#xff08;对着JUC包进行了刨根问底&#xff09;&#xff0c;从Atomic问到了CAS算法&#xff0c;紧接着又有追问到了…

用本地大模型(llama3)进行数据分类标记|LLM 用例

001&#xff5c;背景 这是我最新发布的导航站点 https://aiwith.me 这个站点由于第一版数据来源于第三方&#xff0c;只有站点基础数据&#xff0c;没有对数据进行分类&#xff0c;最近站点上线了&#xff0c;主体框架都搭建完成了&#xff0c;这才有空去对数据做分类. 目前的…