我有以下查询:
SELECT (RAND() * (SELECT MAX(id) FROM frag.test))
结果:-2.36835027969671e + 18
id是:id
bigint(20)unsigned
事情是那样的
SELECT MAX(id) FROM frag.test
结果于15783548581713655808
如果我放置文字编号而不是选择它可以工作
SELECT (RAND() * 15783548581713655808
结果在1.50243050315076e + 19
还有以下查询:
SELECT RAND()*id from frag.test;
结果:
+----------------------+
| RAND()*id |
+----------------------+
| 2.90739099802377e+18 |
| 3.18790581714312e+18 |
| 4.55299756382674e+18 |
| 8.53310890373737e+18 |
| 5.32382972831492e+18 |
| 1.13192831652015e+19 |
+----------------------+
只有在使用MAX()时才会出现问题。
有人对这里可能发生的事情有任何想法吗?
谢谢!
修改
正如科格所指出的,这与铸造有关。 我将查询更改为
SELECT (RAND() * (SELECT cast(MAX(id) as decimal(30,10)) FROM frag.test));
现在它按预期工作了!
答案 0 :(得分:1)
我相信数据类型可能存在问题。 Rand()返回一个浮点值。我不是MySQL专家,但我想知道浮点是否继承转换为int。
尝试将Rand()的结果转换为int或将bigint转换为float或decimal。