SELECT score ,TRIM(BOTH "" FROM ink) as `rank` FROM (
SELECT
score,
@r :=
IF (@p = score, @r, @r + 1) AS ink,
@p := score
FROM
scores,
(SELECT @r := 0, @p := NULL) init
ORDER BY
score DESC)dep
print{"headers": ["score", "rank"], "values": [[4.00, "1"], [4.00, "1"], [3.85, "2"], [3.65, "3"], [3.65, "3"], [3.50, "4"]]}
79/5000我在MySQL中做了一个自定义的整型变量,输出后引号比标题还多,然后我用函数去掉了引号,但输出结果还是在那里,这种情况让我很困惑,希望有人能解答一下,谢谢。
1条答案
按热度按时间oknwwptz1#
TRIM()
输出的数据类型是string。因此双引号字符不是值的一部分。它们是PHP在转储的值时添加的,以标记数据类型是string。1.如果你想获得numeric数据类型的输出列(在这种情况下PHP不会添加双引号),使用
ink + 0
或CAST(ink AS UNSIGNED)
。DEMO fiddle。注意列调整中的值-字符串左对齐,数字右对齐。
另外,如果你把
@p
的初始值从NULL
改为score
中不存在的值(例如,-1
,''
等),那么@r := IF(@p = score, @r, @r + 1)
可能被简化为@r := @r + (@p = score)
。--
我想知道为什么我定义了
@r=0
,它不应该是一个整数,但输出值却用引号括起来- johnson这是用户自定义变量处理功能。
服务器无法预测将来(在您的查询中--在处理下一行时)将为变量分配什么数据类型的值。因此,它使用最常见的数据类型作为用户定义变量,这种数据类型可以接受任何数据类型的值。最常见的数据类型是二进制字符串(更准确地说是LONGBLOB)。
此外,所有用户定义变量值都存储在
PERFORMANCE_SCHEMA.user_variables_by_thread
表中,相应列数据类型为LONGBLOB