首页 新闻 会员 周边

【MySQL】一个关于根据用户变量进行筛选和排序的问题

0
悬赏园豆:100 [待解决问题]

一张工资表如下:


CREATE TABLE salary ( id INT(15) NOT NULL AUTO_INCREMENT COMMENT '主键', ename VARCHAR(20) NOT NULL COMMENT '员工姓名', department VARCHAR(30) NOT NULL COMMENT '部门名称', money INT(6) DEFAULT NULL COMMENT '工资', PRIMARY KEY (id), UNIQUE KEY id (id) ) ENGINE=INNODB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
INSERT INTO salary(id,ename,department,money) VALUES (1,'李德','技术部',6000),(2,'刘明','人事部',8000),(3,'张泉','技术部',9000),(4,'王亮','市场部',7000),(5,'郑强','财务部',5000),(6,'赵庆','人事部',4000),(7,'王林','技术部',6000),(8,'宋翔','市场部',3000),(9,'秦力','市场部',5000),(10,'蒋昆','财务部',2000);

问题1:

执行

SET @r:=1;
SELECT *, @r:=@r+1 FROM salary HAVING @r < 5;

查询出

再执行

SET @r:=1;
SELECT *, @r:=@r+1 FROM salary HAVING @r < 5 ORDER BY @r;

查询出

为什么会什么也查询不出来呢?

问题2:

执行

SET @r:=1;
SELECT *, @r:=@r+1 FROM salary HAVING @r > 1;

查询出

再执行

SET @r:=1;
SELECT *, @r:=@r+1 FROM salary HAVING @r > 1 ORDER BY @r;

查询出

为什么第一次查询出0条记录而第二次却查询出所有记录呢?

问题3:

执行

SET @r:=1;
SELECT *, @r:=@r+1 FROM salary HAVING @r = 1;

查询出

再执行

SET @r:=1;
SELECT *, @r:=@r+1 FROM salary HAVING @r = 1 ORDER BY money;

查询出

为什么第一次查询出1条记录而第二次却查询出所有记录呢?

长大的珊妮的主页 长大的珊妮 | 初学一级 | 园豆:4
提问于:2021-06-30 10:48
< >
分享
所有回答(2)
0

因为你加了Order by ,并且为什么用Having不用where呢?

KingMi | 园豆:1344 (小虾三级) | 2021-06-30 11:12
0

SELECT *, @r:=@r+1 FROM salary HAVING @r = 1;
这里为啥用haveing? 不用where
having结合gropu by用的

为乐而来 | 园豆:1432 (小虾三级) | 2021-06-30 11:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册