SQL进阶技巧:如何获取状态一致的分组? | 最大、最小值法

目录

0 需求描述

1 数据准备

2 问题分析

   方法1:最大、最小值法(技巧)

  方法2:常规思路

3 小结

  如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:

数字化建设通关指南专栏原价99,现在活动价29.9,按照阶梯式增长,直到恢复原价


0 需求描述

星星点灯是一家水果店,它提供了外卖水果拼盘的服务。水果店能够提供四种水果拼盘:水果魔方、海星欧蕾、猫头鹰、草莓雪山,下表反应了某一时刻店内的水果的准备情况。

    id  platter       fruit       ready  
------  ------------  ---------  --------1  水果魔方        猕猴桃            12  水果魔方        香蕉              13  水果魔方        菠萝              14  水果魔方        芒果              15  水果魔方        哈密瓜            16  海星欧蕾        草莓              17  海星欧蕾        橙子              08  猫头鹰          猕猴桃            19  猫头鹰          小橘子            010  猫头鹰          橙子              011  猫头鹰          草莓              112  草莓雪山        草莓              1

上面这些数据存在 platters 表中,platter 是拼盘的名称,fruit 是拼盘要用到的水果,ready 表示水果是否准备好了。当有客户订水果拼盘时,只有拼盘要用到的所有水果都准备好了才能制作。

现在,我们要写 SQL 找出可以立即制作的水果拼盘的名称。

--------------
水果魔方  
草莓雪山  

1 数据准备

create table platters as(select stack(12,1, '水果魔方', '猕猴桃', 1,2, '水果魔方', '香蕉', 1,3, '水果魔方', '菠萝', 1,4, '水果魔方', '芒果', 1,5, '水果魔方', '哈密瓜', 1,6, '海星欧蕾', '草莓', 1,7, '海星欧蕾', '橙子', 0,8, '猫头鹰', '猕猴桃', 1,9, '猫头鹰', '小橘子', 0,10, '猫头鹰', '橙子', 0,11, '猫头鹰', '草莓', 1,12, '草莓雪山', '草莓', 1) as (id, platter, fruit, ready));

2 问题分析

   方法1:最大、最小值法

   思路:本题中ready字段中只有0和1值,因此我们可以利用最小值这种极值思维构建辅助条件。当min(ready) =1说明该字段中所有的值都为1.

第一步:求出ready中的最小值,进行辅助判断

select platter, min(ready) flg
from platters
group by platter

 

为了更好理解此问题我们可以利用窗口函数 min(ready) over (partition by platter) 求出结果并与ready值进行对比分析,这样更直观一些。

select id, platter, fruit, ready, min(ready) over (partition by platter) flg
from platters

 

步骤2:当flg=1时说明ready中全为1,则符合条件,并获取最终结果。

select platter
from (select platter, min(ready) flgfrom plattersgroup by platter) t
where flg = 1

 

上述代码可以简化为:

最终SQL如下

select platter
from platters
group by platter
having min(ready) = 1

方法2:常规思路,需要水果种类数等于准备好的状态数时则满足条件

比如水果魔方,它需要的水果有 5 种,当这些水果处于准备好的状态的数量也为 5 时,它就可以被制作了。 

SELECT platter
FROM platters
GROUP BY platter
HAVING SUM(ready) = COUNT(*);

 

上述方式还可以优化为,当某个水果拼盘下没准备好的水果的数量为 0 时,这个拼盘可以被制作。即:

SELECT platter
FROM platters
GROUP BY platter
HAVING SUM(IF(ready = 0, 1, 0)) = 0

3 小结

本文提供了三种不同的SQL查询方法来实现这一目标,其中最大、最小值这种极限思维的分析方法最为优雅,作为一种技巧需要掌握。

  如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:
数字化建设通关指南
专栏原价99,现在活动价29.9,按照阶梯式增长,直到恢复原价

 

主要内容:
(1)SQL进阶实战技巧
可以参考如下教程,具体链接如下

SQL很简单,可你却写不好?也许这才是SQL最好的教程

上面链接中的文章及技巧会不定期更新。

(2)数仓建模实战技巧和个人心得
       1)新人入职新公司后应如何快速了解业务?

       2)以业务视角看宽表化建设?

       3)  维度建模 or 关系型建模?

       4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?

       5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系                           该由谁来搭建?

       6)如何优雅设计DWS层?DWS层模型好坏该如何评价?

       7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?

       8) 数据架构的选择,mpp or hadoop?

       9)数仓团队应如何体现自己的业务价值,讲好数据故事?

       10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关                          系?

       11)数据部门如何与业务部门沟通,并规划指引业务需求?

文章不限于以上内容,有新的想法也会及时更新到该专栏。

具体专栏链接如下:

数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Trie树之字符串统计问题

这是C算法基础-数据结构专栏的第二十七篇文章,专栏详情请见此处。 引入 Trie树,即字典树,顾名思义,就是用类似字典的方式存储数据,而Trie树最经典也是最简单的一个应用就是字符串统计问题。 字符串统计问题就是维护一个…

【微服务即时通讯系统】——etcd一致性键值存储系统、etcd的介绍、etcd的安装、etcd使用和功能测试

文章目录 etcd1. etcd的介绍1.1 etcd的概念 2. etcd的安装2.1 安装etcd2.2 安装etcd客户端C/C开发库 3. etcd使用3.1 etcd接口介绍 4. etcd使用测试4.1 原生接口使用测试4.2 封装etcd使用测试 etcd 1. etcd的介绍 1.1 etcd的概念 Etcd 是一个基于GO实现的 分布式、高可用、一致…

分库分表还是分布式?如何用 OceanBase的单机分布式一体化从根本上解决问题

随着企业业务规模的不断增长,单机集中式的数据库系统逐渐难以承载企业日益增长的数据存储与处理需求。因此,MySQL 的分库分表方案成为了众多企业应对数据存储量激增及数据处理能力需求扩张的“止痛药”。尽管这一方案短期内有效缓解了企业面临的大规模数…

在新ARM板上移植U-Boot和Linux指南

序言 从支持一个定制板子在U-Boot和Linux中的过程中得到经验以一个带有知名SoC(i.MX6)且IP已经得到支持的板子为例,这次讨论几乎不涉及编码技能,更多地聚焦在U-Boot部分 一般原则 如果您有您的BSP(板级支持包&#…

【全新课程】正点原子《基于GD32 ARM32单片机项目实战入门》培训课程上线!

正点原子《基于GD32 ARM32单片机项目实战入门》全新培训课程上线啦!正点原子工程师手把手教你学!彻底解决ARM32单片机项目入门难的问题! 一、课程介绍 本课程专为ARM32单片机的入门学习者设计,涵盖了环境搭建、编程软件使用、模…

【数学分析笔记】第3章第4节闭区间上的连续函数(2)

3. 函数极限与连续函数 3.4 闭区间上的连续函数 3.4.4 中间值定理 【定理3.4.4】若 f ( x ) f(x) f(x)在 [ a , b ] [a,b] [a,b]上连续,则它一定能取到最大值 M M M与最小值 m m m之间的任何一个值。 M max ⁡ f ( x ) , x ∈ [ a , b ] , m min ⁡ f ( x ) , …

【前端框架对比和选择】React 与 Vue 框架设计思路对比

框架总览 前端框架繁多,在学习的时候也会陷入困惑,我们应该抓住最主流的内容 Vue/React,深入底层,尝试揣摩框架作者的设计思路,开阔前端培训自己的视野,大家也不要把自己限制在框架之中,认为工…

常见区块链数据模型介绍

除了加密技术和共识算法,区块链技术还依赖于一种数据模型,它决定了信息如何被结构化、验证和存储。数据模型定义了账户如何管理,状态转换如何发生,以及用户和开发者如何与系统交互。 在区块链技术的短暂历史中,数据…

数据治理005-血缘关系

数据血缘是元数据产品的核心能力,但数据血缘是典型的看起来很美好但用起来门槛很高的技术,只要你采买过元数据产品就知道了。这篇文章对数据血缘的特征、价值、用途和方法做了系统阐述: 1、特征:归属性、多源性、可追溯及层次性 2…

SAP已知事务码查询关联角色

运维期间客户就出现没有某些事务码的权限,要求添加; 想要添加事务码就必须知道这个事务码属于哪个角色;使用SUIM-角色-按菜单中的事务分配,输入事务码,点击执行就可以查看 找到相关的角色之后,用SU01添加至…

动态规划算法:12.简单多状态 dp 问题_打家劫舍_C++

目录 题目链接:LCR 089. 打家劫舍 - 力扣(LeetCode) 一、题目解析 题目: 解析: 二、算法原理 1、状态表示 状态表示: 2、状态转移方程 状态转移方程推理: 3、初始化 dp表初始化: 特殊…

【抓包工具】如何下载抓包工具Fiddler

目录 Fiddler简介 Fiddler下载步骤 Fiddler安装步骤 配置Fiddler抓取HTTPS Fiddler简介 Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据&#xff08…

【BurpSuite】SQL注入 | SQL injection(1-2)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 【BurpSuite】SQL注入 | SQL injection(1-2) 实验一 Lab: SQL injection vulnerability in WHERE clause…

大数据新视界 --大数据大厂之数据压缩算法比较与应用:节省存储空间

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

2-105 基于matlab的GA-WNN预测算法

基于matlab的GA-WNN预测算法。遗传算法优化小波神经网络的步骤:1设种群规模为M。随机生成初始种群N , 采用实数编码对个体Ni编码。2、用1中的种群N训练, WNN参数由初始化获得。3、计算种群N中个体适应度值。满足终止条件则跳至6, 不满足执行4。4、适应度大的个体, 选…

携手SelectDB,观测云实现性能与成本的双重飞跃

在刚刚落下帷幕的2024云栖大会上,观测云又一次迎来了全面革新。携手SelectDB,实现了技术的飞跃,这不仅彰显了观测云在监控观测领域的技术实力,也预示着我们可以为全球用户提供更加高效、稳定的数据监测与分析服务。这一技术升级&a…

智慧园区建设,构建智能监控和安防体系

智慧园区是指运用先进的信息技术和互联网思维,以提升园区管理和服务水平为目标,通过整合各类资源、优化园区运营,打造智能化、智能、绿色、低碳的现代园区。在智慧园区中,智慧楼宇、智能监控、智慧消防和智慧安防是不可或缺的重要…

SpringBoot整合JPA实现CRUD详解

SpringBoot版本是2.0以上(2.6.13) JDK是1.8 一、依赖 <dependencies><!-- jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><!--…

【ADC】SAR 型 ADC 和 ΔΣ ADC 的选型决策方法

本文学习于TI 高精度实验室课程&#xff0c;介绍如何选择 SAR 或 delta-sigma 型 ADC。 文章目录 一、选型决策树二、特定传感器的应用三、需要 DC 精度但分辨率较低的应用四、需要 DC 精度且分辨率较高的应用五、极低噪声的 DC 精密测量六、需要捕获瞬态信号值的应用七、需要高…

vue单点登录异步执行请求https://xxx.com获取并处理数据

一、请求一个加密地址获取access_token再拼接字符串再次请求 接口返回数据 异步执行请求该地址获取数据并处理 二、请求代码第二步使用 access_token 获取 auth_key // 第二步&#xff1a;使用 access_token 获取 auth_keyconst access_token tokenData.access_token;const …