MYSQL连接合集总结-上

news2024/9/27 1:57:53

再做了一次这部分的leetcode的题目,如下9题,这里先分析前三题。

1.使用唯一标识码替换员工ID

两个表,employees表(id和名字一一对应),employeeUNI表(id和唯一标识一一对应);

题目是把id替换成唯一标识,其实看着很简单,但是因为有可能有没有唯一标识的,所以得用左连接
ok 再次做题成功,左连接和内连接是一样的。

2.产品销售分析

明天再做,有点不想干了,想换脑子了,今天的我来了。

有sales销售这件事的表和product产品这件事的表。

(sales表的话,没想到年份和sales_id为什么是唯一值,年份相同的时候,需要有个额外字段区分因为产品可能相同,但是年份不同的话本身就有区分了。为什么sale_id这一个字段不是主键呢)

这一题不难,想要让你回答的东西很简单。

3.进店却未进行交易的顾客

难读的题,这个题我是做完其他的这个系列的题,留着最后做的。

1.理解表

有两张表-----光临过购物中心的表:光临时间和用户id。交易表:交易id,光临时间,交易额(这里没什么用)

我现在理解为什么这一题难理解,是因为这个光临时间,visit_id 不是那种平常的日期,所以如果没有示例帮助理解的话,很难理解这一题。(我后面理解题的时候再看这两张表,我觉得其实有点搞笑,为什么一个时期只能有一个用户光顾,但是交易可以一个人进行多次,那我觉得一个时期应该也有多个用户啊)

2.理解题

题目是找出光顾但没有交易的顾客id,以及他们只光顾不交易的次数。

于是尝试理解一下,次数也就是记录数,需要用count(),而且基本需要看情况进行分组,因为有时候分组在子查询里这种。那现在重点就是筛选一下找出光顾但没有交易的顾客。而且交易的前提一定是光顾,所以光顾表和交易表左连接,没交易的交易表为null。理解完是下面的语句,然后发现错了(其实中间还是有很多的曲折过程,还是不放上来了,意义不大)

select customer_id,count(*) as count_no_trans From visits v left join transactions t on v.visit_id=t.visit_id  group by customer_id  having transaction_id is null;

然后我有transaction_id is null放在三个地方()的想法,分别是连接语句on后面的并列and后面,having后面,where后面;最终显示放在where是对的。同时也给我上了一课,理解where和having的区别至关重要,我之前以为我理解了,现在发现并没有,而现在我觉得我理解啦。而且on后面and的并列条件也帮助我更加深刻的理解左连接。

 

1transaction_id is null放在连接语句on后面的并列and后面。

得到如下的结果。

2transaction_id is null放在having后面

得到如下结果。

3transaction_id is null放在and后面的呢

这三个有不同的结果的时候,我就觉得我要仔细思考他们的不同了。

1)and为什么会出错。

首先明确这是左连接,所以最后的结果即使不满足and后面的条件,左边所有的visit_id都会显示出来,而且对于这个题来说的话,连接完transaction_id is null的记录更多了。所以在and后面加并不合适啊,达不到筛选transaction_id is null的记录的效果。

2)having为什么出错。

这一点,其实我之前是万万不能理解啊,分组后把transaction_id is null的记录筛选出来不是很正常吗,之前百度的说where和having的区别就是分组前和分组后的区别啊,但是我找啊找,找到了如下的解释:

HAVING子句是GROUP BY子句的一个扩充,用于对分组添加条件。相比之下,WHERE子句用于给查询的SELECT子句添加条件。

我丢,之前没有人和我说过这个区别啊,而我再去百度having怎么使用,又有类似的说法了,真的想骂自己,之前是瞎了吗?没事瞎那么一会儿很正常,嘿嘿。having是用于对分组添加条件,是通过group by那里的字段分组,并且满足having后面的条件的行才行,我笑了这样理解好像没有错啊,好吧我还是根据报错(Unknown column 'transaction_id' in 'having clause')百度靠谱,帮助自己理解,之前一直不愿意这样百度,不知道为啥,可能是惯性,也可能是求快。,下面是很好的解释:

having 后跟的筛选条件所包含的字段必须是select后展示的字段或者group by 的条件字段!!!

3)where为什么正确,就是正确,因为我刚开始看三个都正确。

4.总结上半部分

总结挺费脑子的,我明天总结剩下部分吧,今天再写写新题吧。加上今天早上出去走了一个小时,真的很冷,回来写了会儿就想睡,然后下午又想睡,对于怕冷的我来说,冬天有点难熬啊。

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

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

相关文章

牛客剑指offer刷题模拟篇

文章目录 顺时针打印矩阵题目思路代码实现 扑克牌顺子题目思路代码实现 把字符串转换成整数题目思路代码实现 表示数值的字符串题目思路代码实现 顺时针打印矩阵 题目 描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如&#xf…

网站防盗链是什么

随着互联网的快速发展,网站的安全问题越来越受到关注。其中,防盗链是许多网站面临的一个重要问题。本文将介绍网站防盗链的基本概念、原因以及如何采取措施进行保护。 一、什么是网站防盗链? 网站防盗链是指未经授权的网站通过技术手段获取…

95基于matlab的多目标优化算法NSGA3

基于matlab的多目标优化算法NSGA3,动态输出优化过程,得到最终的多目标优化结果。数据可更换自己的,程序已调通,可直接运行。 95matlab多目标优化 (xiaohongshu.com)

mybatis的数据库连接池

直接看原文 原文链接:【MyBatis】 连接池技术_mybatis自带连接池-CSDN博客 本文先不说springBoot整合mybatis后的 本文讲的是没有被springBoot整合前的mybatis自己的默认的连接池 --------------------------------------------------------------------------------------…

三季度付费用户持续增加,知乎的“吸引力法则”是什么?

在过去的12年里,知乎一直是一个问答社区,通过“一问多答”形成了可以进行专业讨论的社区氛围,并累计完成了上亿次这样的专业讨论,同时还借助平台一问多答的形式打造了网文社区,依托于平台专业职场人的资源池打造了职业…

手写VUE后台管理系统8 - 配置404NotFound路由

设置404页面 配置路由404页面 配置路由 这里配置了两个路由,一个是主页,另外一个则匹配任意路由显示为404页面。因为只配置了两个路由,如果路径没有匹配到主页,则会被自动导向到404页面,这样就可以实现整站统一的404页…

低代码如何降低门槛、快速交付、实现可持续IT架构?

目录 低代码开发模式期望达成的目标 1.降低开发门槛 2.加快系统交付 3.建立可持续发展的IT架构 写在最后 低代码的概念,最早提出的时间是在2014年左右,随后一直处于上升期,随着前两年阿里、腾讯的相继入场,竞争逐步加大。低代…

Redis 之 ZSET 实战应用场景,持续更新!

前言 大白话介绍 Redis 五大基本数据类型之一的 ZSET 开发中常见的应用场景 ZSET 介绍 ZSET 与 SET 相同点:都是是 String类型元素的集合,且不允许重复的成员ZSET 与 SET 不同点:ZSET 每个元素都会关联一个 Double 类型的分数,Re…

用python删除指定目录下带某个字符串的图片

前言: 在文件处理中,有时我们需要批量删除指定文件夹中的特定类型文件。如果文件数量非常庞大,手动删除会非常麻烦,所有可以用 Python 编写一个简单而高效的脚本,自动执行重复性的任务,从而节省时间和精力&…

@Scheduled,Quartz,XXL-JOB三种定时任务总结

Scheduled,Quartz,XXL-JOB三种定时任务总结 一、Scheduled 简介 Scheduled 是 Spring 框架中用于声明定时任务的注解。通过使用 Scheduled 注解,你可以指定一个方法应该在何时执行,无需依赖外部的调度器。 这个注解通常与Enab…

避免20种常见Selenium自动化测试异常,让你的测试更加稳定和可靠!

常见的Selenium异常 以下是所有Selenium WebDriver代码中可能发生的一些常见Selenium异常。 1、ElementClickInterceptedException 由于以某种方式隐藏了接收到click命令的元素,因此无法正确执行Element Click命令。 2、ElementNotInteractableException 即使目…

分清社保、医保、新农合

社保中的大头是养老保险,从上图可知成都每个月最低849.2元,对于底层人民来说价格不菲,但对应的医保才107元,那么能不能只交医保呢? 分三种情况: 1、如果我们购买的是城镇职工医疗保险,公司买的也…

vivado实现分析与收敛技巧9-分析使用率统计数据

实现问题的常见原因之一是未考量显式和隐式物理约束。例如 , 管脚分配 (pinout) 在逻辑布局上变为显式物理约束。 slice( 分片 ) 逻辑在大部分器件中都是一致的。但如下专用资源表示的是隐式物理约束 , 因为这些资源仅在某些位置…

GCN,GraphSAGE 到底在训练什么呢?

根据DGL 来做的,按照DGL 实现来讲述 1. GCN Cora 训练代码: import osos.environ["DGLBACKEND"] "pytorch" import dgl import dgl.data import torch import torch.nn as nn import torch.nn.functional as F from dgl.nn.pytorc…

UVM验证环境 加入env

(1) 如何在UVM验证环境中例化reference model、scoreboard 如何在在验证平台中加入reference model、scoreboard,这个问题的解决方案是引入一个容器类,在这个容器类中实例化driver、monitor、reference model和scoreboard等。在…

Python 自动化办公:文件快速整理分类

平时桌面或文件夹内鱼龙混杂,各种类型的文件都有怎么办? 本篇文章中,我们将学习如何使用 Python 编写一个文件整理分类的脚本。 该脚本能够自动获取文件类型,并将文件按照类型整理到不同的子文件夹中。 先看下效果,…

新的 BLUFFS 攻击导致蓝牙连接不再私密

蓝牙是一种连接我们设备的低功耗无线技术,有一个新的漏洞需要解决。 中间的攻击者可以使用新的 BLUFFS 攻击轻松窥探您的通信。 法国研究中心 EURECOM 的研究员 Daniele Antonioli 演示了六种新颖的攻击,这些攻击被定义为 BLUFFS(蓝牙转发和…

渗透测试学习day4

文章目录 靶机:SequelTask1Task2Task3Task4Task5Task6Task7Task8 靶机:CrocodileTask1Task2Task3Task4Task5Task6Task7Task8Task9Task10 靶机:ResponderTask1Task2Task3Task4Task5Task6Task7Task8Task9Task10Task11 靶机:ThreeTas…

使用百度开发者平台处理语音朗读

--TIME --百度开发者中心-汇聚、开放、助力、共赢 --注册账号 -- 准备工作 准备工作 更新时间:2023-01-13 成为开发者 三步完成账号的基本注册与认证: STEP1:点击进入控制台,选择需要使用的AI服务项。若为未登录状态&#xf…

CleanMyMac X2024破解注册激活码

CleanMyMac X for Mac中文2024版只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉,节省宝贵的磁盘空间。 cleanmymac x个人认为X代表界面上的最大升级,功能方面有更多增加,与最新macOS系统更加兼容,流畅地与系统性…