当前位置: 首页 > news >正文

【MySQL】ANY函数 的巧用(筛选字段 > ANY(语句) 和 筛选字段 < ANY(语句))

力扣题

1、题目地址

1355. 活动参与者

2、模拟表

表:Friends

Column NameType
idint
namevarchar
activityvarchar
  • id 是朋友的 id,并且在 SQL 中,是该表的主键
  • name 是朋友的名字
  • activity 是朋友参加的活动的名字

表:Activities

Column NameType
idint
namevarchar
  • 在 SQL 中,id 是该表的主键
  • name 是活动的名字

3、要求

找出那些既没有最多,也没有最少参与者的活动的名字。

Activities 表中的任意活动都有在 Friends 中参与过。

可以以 任何顺序 返回结果。

下面是返回结果格式的例子。

示例 1:

输入:

Friends 表:

idnameactivity
1Jonathan D.Eating
2Jade W.Singing
3Victor J.Singing
4Elvis Q.Eating
5Daniel A.Eating
6Bob B.Horse Riding

Activities 表:

idname
1Eating
2Singing
3Horse Riding

输出:

activity
Singing

解释:
Eating 活动有三个人参加, 是最多人参加的活动 (Jonathan D. , Elvis Q. and Daniel A.)
Horse Riding 活动有一个人参加, 是最少人参加的活动 (Bob B.)
Singing 活动有两个人参加 (Victor J. and Jade W.)

4、代码编写

我的写法

代码
SELECT DISTINCT activity
FROM (SELECT *, COUNT(activity) OVER (PARTITION BY activity) AS numFROM Friends
) AS two
WHERE num != (SELECT MAX(num)FROM (SELECT *, COUNT(activity) OVER (PARTITION BY activity) AS numFROM Friends) AS one
) 
AND num != (SELECT MIN(num)FROM (SELECT *, COUNT(activity) OVER (PARTITION BY activity) AS numfrom Friends) AS one
)
代码分析

1、先将出现次数算出来

SELECT *, COUNT(activity) OVER (PARTITION BY activity) AS num
FROM Friends
| id | name        | activity     | num |
| -- | ----------- | ------------ | --- |
| 1  | Jonathan D. | Eating       | 3   |
| 4  | Elvis Q.    | Eating       | 3   |
| 5  | Daniel A.   | Eating       | 3   |
| 6  | Bob B.      | Horse Riding | 1   |
| 2  | Jade W.     | Singing      | 2   |
| 3  | Victor J.   | Singing      | 2   |

2、之后再把最高次数和最低次数过滤掉

WHERE num != (SELECT MAX(num)FROM (SELECT *, COUNT(activity) OVER (PARTITION BY activity) AS numFROM Friends) AS one
) 
AND num != (SELECT MIN(num)FROM (SELECT *, COUNT(activity) OVER (PARTITION BY activity) AS numfrom Friends) AS one
)

网友巧用 ANY 函数写法

代码
SELECT activity
FROM Friends
GROUP BY activity
HAVING COUNT(*) < ANY(SELECT COUNT(activity) OVER (PARTITION BY activity) FROM Friends) 
AND COUNT(*) > ANY(SELECT COUNT(activity) OVER (PARTITION BY activity) FROM Friends) 
代码分析

1、首先要求里面我们是要查询出活动名(activity),可以直接使用分组(GROUP BY)取出每个都单一,不用去重,之后就要进行过滤操作

SELECT activity
FROM Friends
GROUP BY activity

2、过滤操作,我们知道使用 GROUP BY 之后,使用 count(*) 可以获取对应分组里面出现的次数,我们只要满足让次数不为全部的最大和全部的最小即可

SELECT COUNT(activity) OVER (PARTITION BY activity) FROM Friends

我使用 SELECT *, COUNT(activity) OVER (PARTITION BY activity) AS num FROM Friends 执行让大家看明显一些

| id | name        | activity     | num |
| -- | ----------- | ------------ | --- |
| 1  | Jonathan D. | Eating       | 3   |
| 4  | Elvis Q.    | Eating       | 3   |
| 5  | Daniel A.   | Eating       | 3   |
| 6  | Bob B.      | Horse Riding | 1   |
| 2  | Jade W.     | Singing      | 2   |
| 3  | Victor J.   | Singing      | 2   |

可以看出出现次数最大值是3,最小值是1

3、这里就可以使用到 ANY 函数,上面的 < ANY 表示,次数小于右边的最大值(3),下面 > ANY 表示,次数大于右边的最小值

COUNT(*) < ANY(SELECT COUNT(activity) OVER (PARTITION BY activity) FROM Friends) 
AND COUNT(*) > ANY(SELECT COUNT(activity) OVER (PARTITION BY activity) FROM Friends) 

具体可参考:MySQL 中 ALL 和 ANY 的用法
参考里面注意看评论,参考里面最后一个例子看着是有误的

相关文章:

  • 【80211-2022】【学习记录】【第九章】Duration/ID 字段(Qos STA)
  • L1-012 计算指数(Java)
  • go 中的 fmt 占位符
  • 【React】常见疑问的整理
  • thinkphp递归实现无限级子分类合并上级children
  • 【idea】idea插件编写教程,博主原创idea插件 欢迎下载
  • Openharmony 对应Android基本系统信息
  • 【Linux系统编程二十六】:线程控制与线程特性(Linux中线程库/线程创建/线程退出/线程等待)
  • 路径规划(二):Dijkstra算法
  • 【sgPasswordInput】自定义组件:带前端校验密码强度的密码输入框,能够提供密码强度颜色提示和文字提示
  • 注解与反射接口AnnotatedElement
  • PTA✨C语言 就不告诉你
  • Python书籍推荐,建议收藏
  • 水文模型(科普类)
  • uni-ui 版本升级提示做个记录
  • angular组件开发
  • Flex布局到底解决了什么问题
  • java小心机(3)| 浅析finalize()
  • mac修复ab及siege安装
  • MySQL-事务管理(基础)
  • Octave 入门
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • SOFAMosn配置模型
  • SpriteKit 技巧之添加背景图片
  • swift基础之_对象 实例方法 对象方法。
  • Vue2.0 实现互斥
  • 当SetTimeout遇到了字符串
  • 动态规划入门(以爬楼梯为例)
  • 高程读书笔记 第六章 面向对象程序设计
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 区块链将重新定义世界
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 深入浏览器事件循环的本质
  • 算法-插入排序
  • 听说你叫Java(二)–Servlet请求
  • 移动端解决方案学习记录
  • 在weex里面使用chart图表
  • 阿里云服务器如何修改远程端口?
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #HarmonyOS:基础语法
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1) caustics\
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (二)Linux——Linux常用指令
  • (二)PySpark3:SparkSQL编程
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (数据结构)顺序表的定义
  • (一)Java算法:二分查找
  • (一)插入排序
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃