похоже если какую то часть конструкции не удаётся высчитать сразу, то он таки прогоняет запрос для каждого union
Код:
select count(*) from(select 1 union select 2 union select 3)x group by (rand(1)*2);
+----------+
| count(*) |
+----------+
| 1 |
| 1 |
| 1 |
+----------+
3 rows in set (0.00 sec)
ну и число похоже должно быть не целочисленное
Код:
select count(*) from(select 'z' union select 'x' union select 'e')x group by (md5(rand(1)*2) + 1);
+----------+
| count(*) |
+----------+
| 2 |
| 1 |
+----------+
2 rows in set (0.00 sec)
select count(*) from(select 'z' union select 'x' union select 'e')x group by (md5(rand(0)*2) + 1);
ERROR 1062 (23000): Duplicate entry '1' for key 'group_key'
select (md5(rand(1)*2) + 1);
+----------------------+
| (md5(rand(1)*2) + 1) |
+----------------------+
| 4 |
+----------------------+
1 row in set (0.00 sec)
select (md5(rand(0)*2) + 1);
+------------------------+
| (md5(rand(0)*2) + 1) |
+------------------------+
| 1.7976931348623157e308 |
+------------------------+
1 row in set (0.00 sec)
думаю никто не расстроится если я тут пофлужу
------------------------------
Код:
select md5(rand(0)*2);
+----------------------------------+
| md5(rand(0)*2) |
+----------------------------------+
| 810e2137cdf4bde97083b021c6b34a09 |
+----------------------------------+
0e кастование типов, ноги float растут отсюда, не забыть найти линк
----------------------------------------------
Код:
> select count(*) from(select 'z' union select 'x' union select 'e')x group by concat(version(),':',(md5(rand(19)*2) + 1));
ERROR 1062 (23000): Duplicate entry '5.6.31:1' for key 'group_key'
> select (md5(rand(19)*2) + 1);
+-----------------------+
| (md5(rand(19)*2) + 1) |
+-----------------------+
| 977882091 |
+-----------------------+
1 row in set (0.00 sec)
мде
-------------------------------------------------
Код:
> select count(*) from(select 'z' union select 'x' union select 'e')x group by concat(version(),':',(md5(rand(19)*2) + 999));
ERROR 1062 (23000): Duplicate entry '5.6.31:999' for key 'group_key'
5.6.31:1 .... 5.6.31:999
куда девается (md5(rand(19)*2)