连接多对多问题

Socket编程——多对多客户端连接 (有问题需解决) Socket 概念 客户端多对多的实现的原理是把服务器作为一个中转站,中转站会会根据客户端的连接数量开辟用户线程,对接连接进来的客户端,客户端首先发送数据包给对接的用户线程, 数据包的内容包括 : 数据名 Value from 信息起点 to 信息终点 info 发送信息 type 发送信息类型 把数据包包装成一个java类如下 Message.java: pac... 阅读详情

需求:

针对同一个广告位拆分出deeplink数据与非deeplink数据

错误代码:

 select ${day},
      case when tb3.adslot_type=1 then '横幅'when tb3.adslot_type=2 then '插屏' when tb3.adslot_type=3 then '开屏' when tb3.adslot_type=4 then '原生' end ,
      tb3.adslot_id ,
      tb3.ext_adslotid,
      tb3.dsp_is_dplk,
      tb3.request_dau ,
      tb3.valid_request_cnt,
      tb3.bid_cnt ,
      tb3.ret_cnt ,
      tb3.without_anti_imp_cnt ,
      tb3.imp_cnt ,
      tb3.without_anti_click_cnt,
      tb3.click_cnt ,
      case when tb3.valid_request_cnt != 0 then CONCAT(round((tb3.bid_cnt / tb3.valid_request_cnt),2)*100,'%') else 0 end ,
      case when tb3.bid_cnt != 0 then CONCAT(round((tb3.ret_cnt / tb3.bid_cnt),2)*100,'%') else 0 end ,
      case when tb3.ret_cnt != 0 then CONCAT(round(tb3.imp_cnt / tb3.ret_cnt,2)*100,'%') else 0 end ,
      case when tb3.without_anti_imp_cnt != 0 then CONCAT(round(tb3.without_anti_click_cnt / tb3.without_anti_imp_cnt,2)*100,'%') else 0 end,
      case when tb3.imp_cnt != 0 then CONCAT(round(tb3.click_cnt / tb3.imp_cnt,2)*100,'%') else 0 end
      from
      (select
          tb.adslot_id,
          tb.adslot_type,tb.dsp_is_dplk,tb.ext_adslotid,
          sum(case when tb.bid_flag = 0 and tb.tracker_imp = 1 and tb.tracker_imp_time-tb.event_time<1800 then 1 else 0 end) as without_anti_imp_cnt,
          sum(case when tb.bid_flag = 0 and tb.tracker_imp = 1 and tb.tracker_click = 1 then 1 else 0 end) as without_anti_click_cnt,
          count(distinct(case when tb.flow_status = 0 then tb.bid_request_id else null end)) as valid_request_cnt,
          count(distinct(case when tb.bid_flag = 0 then tb.bid_request_id else null end)) as bid_cnt,
          count(distinct(case when tb.bid_flag = 0 and tb.bid_dsp_id = tb.dsp_id then tb.bid_request_id else null end)) as ret_cnt,
          count(distinct (tb1.device_imei_md5)) as request_dau,
          sum(case when tb1.bid_flag = 0 and tb1.tracker_imp = 1 then 1 else 0 end) as imp_cnt,
          sum(case when tb1.bid_flag = 0 and tb1.tracker_imp = 1 and tb1.tracker_click = 1 then 1 else 0 end) as click_cnt
          from (select  bid_request_id, adslot_id,adslot_type,ext_adslotid,dsp_id,bid_flag,tracker_imp,tracker_imp_time,event_time,tracker_click,
          flow_status,bid_dsp_id,dsp_is_dplk from adx.adx_bid_info_orc
          where date = '${day}' and adslot_id != '' and adslot_type is not null and dsp_id is not null ) tb
          left join (select bid_request_id,adslot_id,dsp_is_dplk,ext_adslotid,bid_flag,tracker_imp,tracker_click,device_imei_md5
          from adx.adx_bid_orc
          where date = '${day}' and adslot_id != '' and adslot_type is not null )tb1
            on (tb.adslot_id=tb1.adslot_id and tb.dsp_is_dplk=tb1.dsp_is_dplk and tb.bid_request_id=tb1.bid_request_id) 
            group by tb.adslot_id,tb.ext_adslotid,tb.adslot_type,tb.dsp_is_dplk
     )tb3 where tb3.adslot_id in('3234','3169','3190')"

 

结果:

问题:当广告位类型为插屏,id为3234,平台广告位空的展示率为133%,这个结果明显不对。

正确代码:

select ${day},
case when tb.adslot_type=1 then '横幅'when tb.adslot_type=2 then '插屏' when tb.adslot_type=3 then '开屏' when tb.adslot_type=4 then '原生' end ,
      tb.adslot_id ,
      tb.ext_adslotid,
      tb.dsp_is_dplk,
      tb1.request_dau ,
      tb.valid_request_cnt,
      tb.bid_cnt ,
      tb.ret_cnt ,
      tb.without_anti_imp_cnt ,
      tb1.imp_cnt ,
      tb.without_anti_click_cnt,
      tb1.click_cnt ,
      case when tb.valid_request_cnt != 0 then CONCAT(round((tb.bid_cnt / tb.valid_request_cnt),2)*100,'%') else 0 end ,
      case when tb.bid_cnt != 0 then CONCAT(round((tb.ret_cnt / tb.bid_cnt),2)*100,'%') else 0 end ,
      case when tb.ret_cnt != 0 then CONCAT(round(tb1.imp_cnt / tb.ret_cnt,2)*100,'%') else 0 end ,
      case when tb.without_anti_imp_cnt != 0 then CONCAT(round(tb.without_anti_click_cnt / tb.without_anti_imp_cnt,2)*100,'%') else 0 end,
      case when tb1.imp_cnt != 0 then CONCAT(round(tb1.click_cnt / tb1.imp_cnt,2)*100,'%') else 0 end
    from
        (select  adslot_id,adslot_type,ext_adslotid,dsp_is_dplk,
          sum(case when bid_flag = 0 and tracker_imp = 1 and tracker_imp_time-event_time<1800 then 1 else 0 end) as without_anti_imp_cnt,
          sum(case when bid_flag = 0 and tracker_imp = 1 and tracker_click = 1 then 1 else 0 end) as without_anti_click_cnt,
          count(distinct(case when flow_status = 0 then bid_request_id else null end)) as valid_request_cnt,
          count(distinct(case when bid_flag = 0 then bid_request_id else null end)) as bid_cnt,
          count(distinct(case when bid_flag = 0 and bid_dsp_id = dsp_id then bid_request_id else null end)) as ret_cnt
          from adx.adx_bid_info_orc
          where date = '${day}' and adslot_id in ('3234','3169','3190') and adslot_type is not null and dsp_id is not null
          group by  adslot_id,adslot_type,ext_adslotid,dsp_is_dplk) tb
          left join
          (select  adslot_id,adslot_type,ext_adslotid,dsp_is_dplk,
          count(distinct (device_imei_md5)) as request_dau,
          sum(case when bid_flag = 0 and tracker_imp = 1 then 1 else 0 end) as imp_cnt,
          sum(case when bid_flag = 0 and tracker_imp = 1 and tracker_click = 1 then 1 else 0 end) as click_cnt
          from adx.adx_bid_orc
          where date = '${day}' and adslot_id in('3234','3169','3190') and adslot_type is not null
          group by  adslot_id,adslot_type,ext_adslotid,dsp_is_dplk)tb1
          on (tb.adslot_id=tb1.adslot_id and tb.adslot_type = tb1.adslot_type and tb.ext_adslotid=tb1.ext_adslotid and tb1.dsp_is_dplk=tb.dsp_is_dplk)

 

错误原因分析:

在错误代码中,我使用的三个连接字段并不能唯一定位出一行,最后导致在联接时出现了多对多问题。

在写连接时,如何防止多对多?

在连接之前用连接字段进行分组。

 

21、数据合并:一对一、多对一和多对多合并实战 本文详细介绍了数据处理中的多对一和多对多合并操作,包括合并的基本概念、操作步骤、注意事项以及具体示例。文章通过气象站数据和艺术博物馆藏品数据展示了不同合并方式的应用场景,并探讨了合并结果的笛卡尔积问题和缺失值处理方法。最后,文章总结了数据合并的通用策略,以帮助读者提高数据合并的效率和准确性。 阅读详情

相关推荐

多对多关联关系的使用

学习多对多关联关系的使用 SQL基础知识 Hibernate基础知识 1.将数据库eshopdb中的数据清空,添加初始化数据 2.运行MyEclipse,新建一个“Java Project”,加入mysql-connector-java-3.1.12-bin.jar和Hibernate类库支持,然后在src中创建三层类包。 3.创建实体对象、map文件及hibernate.cfg.xml文件 4、配置多对多双向关系

Mybatis的多表连接操作,一对一、一对多、多对多

多表连接 1. 关系: 表和表之间是有关系,当查询其中一张表时,会需要级联的查询另外一张表。 数据之间的关系也要在实体类中进行体现。实体类中通过定义另外一个类型的属性记录2者之间的关系。 1, 如何在MyBatis中处理多表关系 处理多表关系要满足的三个条件 Table,数据库表, 在数据库的表table之间要建立对应的主外键关系 Entity,实体 ,在实体中要定义另一个实体类的属性 Mappe...

Java开发,人工智能,边缘计算,致力于掌握前沿技术 1932

HFSS螺旋线圈的优化设计与高效仿真实践

本文详细介绍了HFSS螺旋线圈的优化设计与高效仿真实践,涵盖核心参数设置、参数化建模、仿真加速技巧及结果分析。通过HFSS软件实现螺旋线圈的高效仿真,特别适用于无线充电和RFID系统设计,提升设计效率与性能验证准确性。

weixin_30235225的博客 445

桥接模式——多对多的连接

(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 将抽象部分与实现部分分离,使它们都可以独立的进行变化。二、使用场景 (1)任何多维度变化类或者说多个树状类之间的耦合都可以使用桥接模式来实现解耦; (2)如果一个系统需要在构件的抽象角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,可以通过桥接模式使它们在抽象层建立一个关联关系; (3)对于那些不希望使用

wangwei129549的博客 579

Echats-wordcloud 文字云图的踩坑点【Unknown series wordCloud】

一直都是报 【ECharts Unknown series wordCloud】这玩意可能要刷脸,祝你好运吧~

Sky_Bug的博客 2418

C# 基于NetStandard.Opc.Ua实现高效OPC UA数据订阅与同步读写

本文详细介绍了在C#中利用NetStandard.Opc.Ua库高效实现OPC UA数据订阅与同步读写的方法。通过实战代码演示了如何建立连接、配置订阅管理器、优化监控项分组,并对比了同步与异步读写的适用场景,帮助工业软件开发者构建稳定可靠的数据采集客户端,提升工业物联网应用开发效率。

weixin_29201859的博客 228

hibernate 的 关联关系之多对一(一对多) 学习笔记

关联关系: 解释: 关联关系--表示对象之间的关系,既有数量性,又有方向性; 作用:将对象之间通过某种方式联系起来。 关联的方向: 关联关系的方向可分为单向关联和双向关联。 双向关联的方向其实就不重要了,因为通过任一一方都可以维护彼此的关系。也就是说:在双向关联中一对多和多对一都是一样的。 一:关联关系之多对一(单向关联) 在关联标记例如<man...

weixin_30697239的博客 163

新手工程师必看:搞定EMI传导干扰,从理解差模和共模开始(附实战案例)

本文深入解析EMI传导干扰中的差模与共模问题,为新手工程师提供从诊断到治理的完整方法论。通过实战案例展示如何通过频谱分析、近场探头扫描等技术精准定位干扰源,并分享PCB布局、滤波器设计等系统级解决方案,帮助工程师高效解决传导干扰问题,提升EMC设计能力。

weixin_26757925的博客 472

hive怎么处理过滤掉满足多个多个条件的记录_Hive的经典面试题

很久没有发文章了,今天发表一下Hive的总结,如果那里有不足的欢迎指正,顺便再提一个问题(数仓建模中:细化程度越高,粒度级就越小,相反,细化程度越低,粒度级就越大,这个说法能打个比方比喻出来吗?)必会的函数:select:选择 having,where:筛选 sum,max,min,count+group by:聚合 sort by,oder by:排序-row number-分组排序 disti...

weixin_39633493的博客 1329

电路研究9.4——合宙Air780EP的LuatOS、CSDK跟标准AT

 C-SDK、AT指令、LuatOS

esmember的博客 1116

机械臂的运动学分析-工业机器人

机械臂的运动学是研究机械臂各连杆坐标系之间的运动关系,是对机械臂进行运动控制的基础。本章分析了所设计的六自由度机械臂的运动学。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。

qq_59137727的博客 6648

关于socket一对一和多对一连接总结

一个客户端对应一个服务端长连接: while(true)应该在输入输出流方位进行阻塞,目的指accept阻塞一个客户端,并进行长连接处理客户端信息,此时客户端服务端都不可断开; 多个客户端连接服务端后断开 while(true)应该在accept处进行阻塞,目的是接受多个客户端过来的连接,此时客户端一次连接断开,服务端server不可断开,只关闭socket即可,再次循环到accep

只作为个人备忘录 5347

2026年3月GESP真题及题解(C++七级):物流网络

2026年3月GESP真题及题解(C++七级):物流网络

王老师青少年编程 1126

NodeJS中使用Sequelize连接MySQL数据库,多对多关联中,查询出来的数据不正确的问题

情景:在NodeJS中开发RestApi接口,用的是Sequelize连接MySQL,遇到的问题是查询的时候出来的奇葩结果如下: 预期中的结果应该是如下: [ { "id": 3, "title": "标题3", "content": "内容3", "createdAt": "2021-03-30T06:39:30.000Z", "updatedAt": "2021-03-30T06:39:30.000Z", "tags": [ {

小歲月丶太着急 1010

YOLOv11涨点改进 | 首发全网创新、主干改进篇 | AAAI 2026 | PartialNet 主干让 YOLOv11 更加强大!引入部分通道机制 和 部分注意力卷积,全方面提升了模型的性能

本文提出PartialNet主干网络改进YOLOv11的方法,通过部分通道机制(PCM)和部分注意力卷积(PATConv)提升模型效率。PartialNet将特征图通道拆分并应用不同操作,显著减少计算量和内存占用。主要创新包括:1)部分通道机制实现计算优化;2)三种注意力模块(PATch/PATsp/PATsf)增强特征提取;3)动态部分卷积(DPConv)自适应调整计算复杂度。文章详细提供了代码实现和YOLOv11集成方法。

Ai缝合怪、助力小伙伴高效发论文 268

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ssm框架多表查询多对多的方法

多表查询多对多的查询方法和一对多的查询方法相同!!! 注意事项; 不用纠结中间表,但是中间表中不能有除了外键列的其他数据,因为写了也没用,查询不到,把需要展示的字段都写在实体双方; 新增的集合属性需要设置get set 方法,要不然前台获取不到对方的值 在多对多的查询中,尽量不要使用连接查询,改为使用子查询,避免出现分页条数不对的问题; 可以选择双方的任一方写查询语句,得到的结果是相同的,所以不用纠结怎么糅合到一个查询方法里 1.连接查询 <select id="getAllWith

love_yr的博客 1393

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

多表连接分页问题

项目中有个业务需要多张表的一个连接,还需要根据{size}和{offset}进行分页,这个时候,问题来了,表连接如果是一对一关系,正常在sql最后分页,什么事都没有,可是,一旦有多对多关系和一对多关系,这种分页明显用不了了!为什么??? 我们可以分析一下:假如,t_student有10条数据,t_course表有多条,一个同学可以选择多个课程,一个课程可以属于多个学生,典型多对多,因此需要一张关

zhangpan_soft的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

gorm基础-7.多对多关系

默认的连接表,只有双方的主键id,展示不了更多信息了这是官方的例子,我修改了一下ID uintID uint这个功能还是很有用的,例如你的文章表 可能叫ArticleModel,你的标签表可能叫TagModel那么按照gorm默认的主键名,那就分别是ArticleModelID,TagModelID,太长了,根本就不实用这个地方,官网给的例子看着也比较迷,不过我已经跑通了主要是要修改这两项joinForeignKey 连接的主键idJoinReferences 关联的主键idID uint。

枫枫知道的个人博客 585

多对多关系

http://office.microsoft.com/training/training.aspx?AssetID=RP061827602052&ofcresset=1 “订单”表中的主键。 “产品”表中的主键。 一个订单可以包含多种产品 ... ... 且每种产品可以出现在多个订单上。 课程文本 在多对多关系中,一个表中的一个记录与...

weixin_30576827的博客 298

Mysql中关于表与表之间连接查询的问题

三种连接方式 一对一:两张表为一一对应的关系,如编号01在表1与表2中仅有一条记录,现实中极为少见 一对多:如编号01在表1中出现一条记录,而在表2中出现2条甚至多条记录,现实业务中较常见 多对多:顾名思义,同一个编号在两张表中各出现1次以上的记录,业务中少见,个人经验,若采取此种方式连接查询会导致重复计算,与实际业务情况不符,产生错误。 针对多对多情况,举例说明: 题目:让求出购买力最强的前十...

reed_rxs的博客 847

MyBatis:自关联查询——多对多查询的实现

假设一名学生可以选多门课,每门课可以由多名同学来选,那么这就涉及到多对多关系。 需求:通过查询学生,可以得到这名学生所选全部课程信息。 建立DB表: course表:课程名和id student表:学生姓名和id 中间表:学生id和课程id student和course表的内容其实都是相对独立,我们通过一个中间表middle来连接两个表。 建立实体类: Studen

weixin_41113108的博客 594

MyBatis :何时选择连接查询,何时使用<collection>标签?

一对多关联连接查询是主流选择,因其性能可控、实现直观;嵌套查询仅在深度延迟加载场景有价值。多对多关联MyBatis不推荐直接实现,应通过中间表拆解为两个一对多,避免复杂度和性能陷阱。

weixin_43833540的博客 1627

map中的 string 多了一对双引号_Mysql中的一对一 一对多 多对多

Mysql关系型数据库设计中存在着三种关系:一对一,一对多,多对多今天详细的总结下一对一: 表中的一列对应着另外表中一列这种一一对应的关系并不常见。一一对应的列可以放在一个表里面,但是这样做一定有原因,例如,把一个大表分成若干小表,可以确保安全,防止信息泄露。对于工资信息表,每小时的工资钱数对于不同岗位的人员有所区别,敏感的信息除了统计工资的工作人员之外,其他人不能看到。这列数据经常被放在一个单独...

weixin_39914938的博客 883

告别复杂SQL!TypeORM多对多关系与连接表配置实战指南

TypeORM是一个强大的ORM(对象关系映射)库,专为JavaScript和TypeScript设计,能够轻松处理Node.js中的关系数据库操作。它支持多种数据库如MySQL、PostgreSQL、SQLite等,通过对象映射简化数据操作,让开发者告别繁琐的SQL编写。 ## 多对多关系:数据关联的终极解决方案 🚀 在关系型数据库中,多对多关系是一种常见的数据关联模式。例如文章与标签、学

gitblog_00452的博客 477

mybatis多对多查询

标题mybatis多对多中role和user对应数据封装不出来 问题展示: 原因:mybatis主配置文件SqlMapConfig.xml中, jdbcConfig.properties文件路径配的是绝对路径, 在idea中改了连接数据库名称后,idea没有实时更新本地绝对路径中jdbcConfig.Properties中的内容,导致连接数据库的名称为另一个叫test的库,恰好test库中也有user和role表,只是内容不一致。 总结:程序找错时,工程基本代码没问题,那就看输出的内容,看需要的功能,通过

weixin_45719953的博客 178
上一篇: Java json 字符串处理
下一篇: Top N 问题(MR,Hive,Mysql)
date-date
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值