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))
相关推荐
AAA修煤气灶刘哥1 小时前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
程序新视界2 小时前
学习MySQL绕不开的两个基础概念:聚集索引与非聚集索引
mysql
RestCloud5 小时前
跨境数据传输:ETL如何处理时区与日期格式差异
mysql·api
RestCloud5 小时前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术9 小时前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
xiaok9 小时前
mysql中怎么创建一个可控权限数据库账号密码给到开发者
mysql
可涵不会debug12 小时前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom13 小时前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
玉衡子13 小时前
九、MySQL配置参数优化总结
java·mysql