专栏首页SQL实现SQL 获取状态一致的分组

SQL 获取状态一致的分组

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

    id  platter       fruit       ready  
------  ------------  ---------  --------
     1  水果魔方        猕猴桃            1
     2  水果魔方        香蕉              1
     3  水果魔方        菠萝              1
     4  水果魔方        芒果              1
     5  水果魔方        哈密瓜            1
     6  海星欧蕾        草莓              1
     7  海星欧蕾        橙子              0
     8  猫头鹰          猕猴桃            1
     9  猫头鹰          小橘子            0
    10  猫头鹰          橙子              0
    11  猫头鹰          草莓              1
    12  草莓雪山        草莓              1

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

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

实现的方式比较多,有一种是通过数量去判断。比如水果魔方,它需要的水果有 5 种,当这些水果处于准备好的状态的数量也为 5 时,它就可以被制作了。

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

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

由于只有两种状态,要么准备好了,要么没准备好。我们可以换另一种表达,当某个水果拼盘下没准备好的水果的数量为 0 时,这个拼盘可以被制作。

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

也可以通过状态去判断,如果拼盘下的水果都准备好了,那就说明不存在没准备好的水果。

SELECT DISTINCT 
  platter 
FROM
  platters a 
WHERE NOT EXISTS 
  (SELECT 
    NULL 
  FROM
    platters 
  WHERE platter = a.platter 
    AND ready = 0);
  
  
platter       
--------------
水果魔方  
草莓雪山  

本文分享自微信公众号 - SQL实现(gh_684ee9235a26),作者:zero

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SQL 获取上一个订单的状态

    现在要做的是在 t_order 表中增加一列 last_id,用于展示上一个状态为“成功”的订单的 id,若找不到符合条件的订单,则 last_id 为 NUL...

    白日梦想家
  • Android获取状态栏和标题栏的高度 博客分类: Android小技巧 Android

    decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDi...

    chroya
  • GenerateTableFetch

    该处理器用于生成在表中执行分页查询的SQL 查询语句,分区(属性partition)大小以及表的行数决定页面的大小和数量以及生成的流文件。此外,可以通过设置最大...

    用户5475193
  • Oracle-动态性能视图解读

    动态性能视图属于数据字典,它们的所有者为SYS,并且多数动态性能视图只能由特权用户和DBA用户查询。

    小小工匠
  • 聚合支付结算平台漏洞的渗透测试

    2020春节即将来临,收到新聚合支付平台网站客户的求助电话给我们Sinesafe,反映支付订单状态被修改由原先未支付修改为已支付,导致商户那边直接发货给此订单会...

    技术分享达人
  • jwt 实践应用以及特殊案例思考

    JSON Web Token 是 rfc7519[1] 出的一份标准,使用 JSON 来传递数据,用于判定用户是否登录状态。

    coder_koala
  • JDBC与JAVA数据库编程

    一、JDBC的概念 1、 JDBC (Java DataBase Connectivity) Java数据库连接     a) 主要提供java数据库应用程序...

    lizelu
  • JWT( JSON Web Token )的 实践,以及与 Session 对比

    Json Web Token 是 rfc7519 出的一份标准,使用 JSON 来传递数据,用于判定用户是否登录状态。

    芋道源码
  • 深入浅出 TiDB 框架

    TiDB主要分为3个核心组件:TiDB Server ,PD Server 和TiKV Server,还有用于解决用户复杂OLAP需求的TiSpark组件。部署...

    孙玄@奈学教育
  • 资源等待类型sys.dm_os_wait_stats

    动态管理视图  sys.dm_os_wait_stats  返回执行的线程所遇到的所有等待的相关信息。可以使用该聚合视图来诊断 SQL Server 以及特定查...

    欢醉
  • JDBC事务与保存点 JDBC简介(七)

    数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。

    noteless
  • Flink1.5发布中的新功能

    Flink 1.5.0 是 1.x.y 系列的第六个主要版本。与往常一样,它兼容之前 1.x.y 版本中使用 @Public 注解标注过的 API。

    smartsi
  • Python3 操作Mysql数据库

    py3study
  • sys.dm_db_wait_stats

    悟空聊架构
  • TiDB EcoSystem Tools 原理解读(一):TiDB-Binlog 架构演进与实现原理

    TiDB-Binlog 组件用于收集 TiDB 的 binlog,并提供实时备份和同步功能。该组件在功能上类似于 MySQL 的主从复制,MySQL 的主从复制...

    PingCAP
  • 10 个经典的 Java 集合面试题,看你能否答得上来?(会员专享)

    本文为CSDN博主「我要取一个响亮的昵称」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blo...

    CSDN技术头条
  • 基于 Flink SQL CDC 的实时数据同步方案

    Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家...

    Spark学习技巧
  • jdbc就是这么简单

    JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问...

    好好学java
  • jdbc就是这么简单

    JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问...

    好好学java

扫码关注云+社区

领取腾讯云代金券