次のクエリがあります。
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() が使用されている場合にのみ発生するようです。
ここで何が起こっているのか考えている人はいますか?
ありがとうございました!
編集:
cogeが指摘したように、これはキャスティングと関係があります。クエリを次のように変更しました
SELECT (RAND() * (SELECT cast(MAX(id) as decimal(30,10)) FROM frag.test));
そして今、期待どおりに動作します!