left join 使用 sum()

news2024/11/15 7:37:45

一,表结构

表一,test_group 分组表
在这里插入图片描述
表二,test_user 用户表
在这里插入图片描述
test_group 和 test_user 是一对多的关系

二,sql

  1. 统计一班的总得分和所有用户的总年龄
SELECT SUM(a.score),SUM(b.age),a.groupname from test_group a LEFT JOIN test_user b on a.id=b.group_id where a.id=1

在这里插入图片描述
会发现 一班的 score 不对,翻了4倍。要解释这个问题需要先弄懂 left join。
例如:

1.   SELECT * from test_group a LEFT JOIN test_user b on a.id=b.group_id;

在这里插入图片描述

2.   SELECT * from test_group a LEFT JOIN test_user b on a.id=b.group_id where b.sex=1;

在这里插入图片描述

 1.   SELECT * from test_group a LEFT JOIN test_user b on a.id=b.group_id and b.sex=1;

在这里插入图片描述

left join 首先 根据 on 条件组成一个临时表
on 条件可以有多个,on条件是在组成临时表前对 右表的筛选
where 条件是对 组成好的临时表进行筛选,不符合条件的直接筛选掉

语句2中where 条件 sex=1,从临时表中去掉不符合条件的数据
语句3中 on 多个条件,先对右表筛选 sex=1,再生成临时表。左表没有的数据以null补齐,以右表为主。

  1. sum数据不对的问题
SELECT * from test_group a LEFT JOIN test_user b on a.id=b.group_id where a.id=1;

在这里插入图片描述

 SELECT SUM(a.score),SUM(b.age),a.groupname from test_group a LEFT JOIN test_user b on a.id=b.group_id where a.id=1;

一对多,实际上是对上面四条数据的 sum(a.score)。

  1. 正确的写法
SELECT SUM(DISTINCT a.score),SUM(b.age),a.groupname from test_group a LEFT JOIN test_user b on a.id=b.group_id where a.id=1;

因为查询后的每个 group中的score都一样,可以使用 distinct 去重。SUM DISTINCT只能用于单个列的求和,不能用于多个列的求和

SELECT SUM(a.score),SUM(b.age2),a.groupname from test_group a LEFT JOIN (select id,group_id,SUM(age) age2 from test_user GROUP BY group_id) b
 on a.id=b.group_id where a.id=1

避免直接lefj join 查询,先查询子表,再将子表查询结果与主表结果关联
先处理“一对多”中这个多表,将多表中的数据先聚合成一条
再和 左表连接查询

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Keepalived高可用配置服务器集群

前言 上章完成了通过nginx对服务器配置了负载均衡,保证了一个服务器宕机另一个服务器顶上,但是有一个问题出现了,如果nginx宕机了怎么办,这章会对这个问题进行讲解,配置集群来保证nginx宕机下一个顶上来,服务器一直能提供服务当一台服务器宕机的时候把从服务器切换为主,提供虚…

【机器人学】7-3.六自由度机器人自干涉检测-圆柱体的旋转变换【附MATLAB代码】

前言 上一章确定了机械臂等效的圆柱体的上下圆心坐标,这篇文章将解决算法三个核心中的第二个核心: 一 根据机械臂的几何数据以及DH参数,确定机械臂等效的圆柱体的上下圆心坐标。 二 将一个圆柱体旋转到与坐标Z轴对齐,另一个圆柱…

华为机考笔试没有结果?

点击上方"互联网求职达人",选择"设为置顶or星标" 第一时间获取最实用的求职以及备考信息 华为机考笔试范围是什么?​https://mp.weixin.qq.com/s?__bizMzU2NjE0NjMxNg&mid2247483962&idx1&sn69b0b152dd8e7ebe9ddb356b…

livekit 环境搭建

目录 livekit介绍 搭建开发环境 goland编译 运行server 启动server 通过lk命令加入房间 通过web打开本地摄像头 通过goland调试livekit livekit介绍 livekit是一个开源的webrtc服务器,性能十分强大,房间管理、redis、信令业务、流媒体sfu都支…

PMP备考经验 | 如何做到一次考过3A?

一,直播课的学习 面对大量场景阅读题,且刷题也基本没原题的PMP考试,从报名的时候就知道临考刷题大法肯定是行不通的,也想把这个证好好学下去真的成为项目管理专家。 于是第一个周末的直播课两天跟随听课,认真做笔记&am…

数据结构——链表学习

数据结构初步了解 链表是数据结构的一部分,所以我想先理清数据结构的要点: 它们说:程序算法数据结构,在计算机中,把所有可以输入到计算机中能被计算机进行处理的符号的总称叫做数据。 数据结构包括两部分&#xff0…

美畅物联丨物联网平台的标准化之路:物模型设计的创新及应用

随着物联网(IoT)技术以前所未有的迅猛之势蓬勃发展,海量的物联网终端与应用纷纷接入,这不可避免地引发了数据与应用层面的异构化难题,进而形成了复杂且多变的碎片化问题。物联网感知数据因其具备多源异构的显著特性&am…

基于vue框架的病房管理系统设计与实现uilp1(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:患者,医护人员,患者病历,医院病房,住院信息,科室,病房预约,住院费用 开题报告内容 基于Vue框架的病房管理系统设计与实现开题报告 一、引言 随着医疗信息化建设的不断深入,病房管理作为医院日常运营的核心环节之一&#x…

VMware Workstation虚拟机 + 许可证密钥

VMware Workstation虚拟机 许可证密钥 VMware Workstation是什么?VMware简介VMware 安装VMware系统要求VMware 版本下载地址许可证序列码看这里 !!!!! VMware Workstation是什么? VMware简介 …

揭开容器的面纱:容器技术全景概述

随着云计算的快速发展,容器技术已经成为IT行业的重要组成部分。Docker作为一种领先的容器化技术,为应用程序的开发、部署和运行带来了革命性的变化。本篇文章将详细介绍容器技术的概念、发展历程及其在现代计算中的应用。通过对Docker的深入了解&#xf…

友思特方案 | 基于三维点云实现PCB装配螺丝视觉检测

导读 三维点云是完成精密化 PCB 检测的最新视觉技术。友思特 Saccde Vision 视觉扫描系统,采用先进的三维成像技术和算法输出直观点云图,进一步确保了PCB生产的可靠性与稳定性能。 在电子产品的生产过程中,PCB(Printed Circuit B…

streamlit+wordcloud使用pyinstaller打包遇到的一些坑

说明 相比常规的python程序打包,streamlit应用打包需要额外加一层壳,常规app.py应用运行直接使用 python app.py就可以运行程序了,但streamlit应用是需要通过streamlit命令来运行 streamlit app.py所以使用常规的pyinstaller app.py打包是…

阿里云服务器自带多少DDoS防护?小编为你详细揭秘!

大家好呀!今天小编来聊聊一个很多朋友都关心的问题:阿里云服务器自带多少DDoS防护?随着网络攻击手段的日益猖獗,DDoS攻击对企业业务的威胁越来越大,选择一个安全可靠的云服务器至关重要。阿里云作为国内领先的云计算服…

宝宝自闭症的表现与理解

自闭症,又称孤独症,是一种复杂的神经心理障碍,它影响患儿的脑部发展,并在社交沟通、兴趣和行为上表现出明显的异常。自闭症通常在幼儿期就有所体现,但很多时候,家长在宝宝一岁前后才会开始注意到这些异常表…

排序算法刷题笔记【牛客网】

排序算法刷题笔记【牛客网】 排序算法刷题记录,来自牛客网,主要是有些题目会去搜一下相关知识,这里就用来做笔记,类似错题本了。 会持续更新…… 其实就是把45前面的排好了,然后45从后往前比较。 45前面的排列&#xf…

高级问题解决查询搜索网址

1、世界上最大的技术问答网站,里面问题的种类很多,回答的质量也很高,当你在谷歌等搜索引擎没能得到满意的答案的时候,可以到Stack Overflow上看 2、Reddit是一个全球性的社交新闻网站和讨论平台,用户可以在这里分享、…

grafana可视化 安装及集成zabbix数据源详细教程

目录 grafana简介安装grafana安装示例汉化(选做)启动访问web界面 安装zabbix插件在线安装离线安装启用插件 配置zabbix数据源 grafana简介 Grafana是一个功能强大、灵活性高、易于使用的数据可视化工具,广泛应用于各种领域,包括I…

el-input-number,增加清空icon按钮,输入值居左(左对齐)、去除控制按钮

:controls"false"&#xff0c;不使用控制按钮&#xff1b; <div><span class"label">金额</span><divstyle"width: 100%;border: solid 1px rgba(0, 0, 0, 0.1); border-radius: 4px; display: flex;align-items: center;"…

比裁员更侮辱人的事发生了。。。

在这个快节奏的时代&#xff0c;职场如战场&#xff0c;每个人都在为了生存而奋斗。但你有没有遇到过这样的情况&#xff1a;工作量突然增加&#xff0c;薪水却纹丝不动&#xff1f; 最近某位网友爆料&#xff0c;他们公司裁掉两名员工&#xff0c;一个月薪一万七&#xff0c;…

解决npm下载依赖速度慢的问题

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…