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))
相关推荐
5***262215 小时前
SQL Server导出和导入可选的数据库表和数据,以sql脚本形式
数据库·sql
JSUITDLWXL15 小时前
Oracle记录被锁的查询与强制删除方法
数据库·oracle
雨中飘荡的记忆16 小时前
SpringAI_Redis向量库实战
数据库·redis·缓存
姓蔡小朋友16 小时前
Redis网络I/O模型
网络·数据库·redis
数据库学啊16 小时前
专业的国产时序数据库哪个好
数据库·时序数据库
爱吃面条的猿17 小时前
MySQL 随机日期/时间生成
数据库·mysql
2501_9399090517 小时前
Mysql 主从复制、读写分离
数据库·mysql
k***825117 小时前
图文详述:MySQL的下载、安装、配置、使用
android·mysql·adb
潇湘秦17 小时前
ORACLE_PDB_SID和ORACLE_SID的区别
数据库·oracle
0***863317 小时前
SQL Server2019安装步骤+使用+解决部分报错+卸载(超详细 附下载链接)
javascript·数据库·ui