如何在mysql中声明一个变量,以便我的第二个查询可以使用它?
我想写一些类似的东西:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
原文由 cdub 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在mysql中声明一个变量,以便我的第二个查询可以使用它?
我想写一些类似的东西:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
原文由 cdub 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想在这里给出我的答案,以便人们可以尝试,我认为更容易理解的 MySql 解决方案:
set @countVal = (select count(*) from STATION);
/**
499/2 = 249,5 -> 250 -- ceil
499/2 = 249,5 + 1 = 250,5 -- floor 250
500/2 = 250 -- ceil 250
= 250 + 1 = 251 -- flor 251
**/
set @ceilVal = ceil(@countVal/2);
set @floorVal = floor( (@countVal/2) + 1);
SELECT ROUND(AVG( latitude ),4) FROM
(SELECT @lineNum:= @lineNum + 1 as id,
lat_n as latitude
FROM STATION s, ( SELECT @lineNum :=0 ) pivot
ORDER BY lat_n) as a
WHERE id IN ( @ceilVal, @floorVal );
原文由 Jean Carlos Souza 发布,翻译遵循 CC BY-SA 4.0 许可协议
5 回答3.4k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答2.1k 阅读
3 回答2.1k 阅读
MySQL 中的变量主要分为三类:
@
):您可以访问任何用户定义的变量,而无需声明或初始化它。如果你引用一个没有被初始化的变量,它的值为
NULL
和一个字符串类型。您可以使用
SET
或SELECT
语句初始化变量:或者
可以从一组有限的数据类型中为用户变量分配一个值:整数、十进制、浮点、二进制或非二进制字符串,或 NULL 值。
用户定义的变量是特定于会话的。也就是说,一个客户端定义的用户变量不能被其他客户端看到或使用。
它们可用于
SELECT
使用 高级 MySQL 用户变量技术 的查询。局部变量需要在访问之前使用
DECLARE
声明。它们可以用作局部变量和存储过程中的输入参数:
如果缺少
DEFAULT
子句,则初始值为NULL
。局部变量的范围是
BEGIN ... END
声明它的块。服务器系统变量(前缀为
@@
):MySQL 服务器维护许多配置为默认值的 系统变量。它们可以是
GLOBAL
、SESSION
或BOTH
类型。全局变量影响服务器的整体操作,而会话变量影响其对单个客户端连接的操作。
要查看正在运行的服务器使用的当前值,请使用
SHOW VARIABLES
语句或SELECT @@var_name
。它们可以在服务器启动时使用命令行或选项文件中的选项进行设置。它们中的大多数可以在服务器运行时使用
SET GLOBAL
或SET SESSION
动态更改: