sql查询当前值到最大值中间的数据

方法一

复制代码
select * from cmp where id >1 and id <= max(id)

很明显这样做是错的

会报错

invalid use of group function

原因是 max是聚合函数, where条件中不能使用聚合函数

为什么呢

这是一个很有意思的问题,仔细地想一下其实很有道理。我们知道,聚集函数也叫列函数,它们都是基于整列数据进行计算的,而where子句则是对数据行进行过滤的,在筛选过程中依赖"基于已经筛选完毕的数据得出的计算结果"是一种悖论,这是行不通的。更简单地说,因为聚集函数要对全列数据时行计算,因而使用它的前提是:结果集已经确定!而where子句还处于"确定"结果集的过程中,因而不能使用聚集函数。与where子句不能出现聚集函数正相反的是,我们几乎看不到不使用聚集函数的having子句。为什么?因为在水平方向上根据外部指定条件的筛选(也就是对行的筛选),where子句可以独立完成,剩下的往往都是需要根据结果集自身的统计数据进一步筛选了,这时,几乎都需要通过having子句配合聚集函数来完成。

另外,对于having子句再多说一点:没有使用group by而直接使用having子句的例子是不太多见,因为如果没有group by,那么整个结果集就是一个分组,但是这种例子也不是没有,比如当我们需要对"现有的"整个结果集进行"二次筛选"时,就会直接使用having子句了。

因此

方法就是

复制代码
select * from cmp where id > 1 
group by id 
having
  id <= max(id)

或者

复制代码
select * from cmp where id >1 and (select * from cmp where id <=max(id))
相关推荐
rfidunion1 天前
springboot+VUE+部署(9。安装MySql)
spring boot·后端·mysql
Hello.Reader1 天前
Flink OpenSearch SQL Connector Append/Upsert、动态索引、Exactly-Once 与性能调参
大数据·sql·flink
枷锁—sha1 天前
【Vulhub】Discuz! 7.2 faq.php SQL 注入深度复现手册 (转义逃逸篇)
数据库·sql·php
超级种码1 天前
Redis:Redis 常见问题及解决思路
数据库·redis·缓存
计算机学姐1 天前
基于SpringBoot的社区互助系统
java·spring boot·后端·mysql·spring·信息可视化·推荐算法
xcLeigh1 天前
Oracle 迁移 KingbaseES 避坑指南:工具选型、参数配置与性能调优
数据库·oracle·工具·性能·金仓·kingbasees
JY.yuyu1 天前
SQL Server数据库
数据库
June bug1 天前
【配环境】安装配置Oracle JDK
java·数据库·oracle
独自破碎E1 天前
如何在MySQL中监控和优化慢SQL?
数据库·sql·mysql
数据库生产实战1 天前
基础知识 | Oracle Index Split(索引分裂:你的数据库越来越慢可能与此有关!建议排查!
数据库·oracle