Создание последовательностей в MySQL? - PullRequest
0 голосов
/ 30 октября 2019

Я видел в статьях, что мы можем использовать функции rand () и floor () для создания последовательностей из 0 и 1

mysql

SELECT floor(rand(0)*2) FROM security.users;

+------------------+
| floor(rand(0)*2) |
+------------------+
|                0 |
|                1 |
|                1 |
|                0 |
|                1 |
|                1 |
|                0 |
|                0 |
|                1 |
|                1 |
|                1 |
|                0 |
|                1 |
|                1 |
|                1 |
|                0 |
+------------------+
16 rows in set (0.00 sec)

Есть ли другой способ добиться этого?
* я не говорю об auto_increment;

1 Ответ

0 голосов
/ 30 октября 2019

Если степень случайности / предсказуемости не важна, да, есть другие способы генерировать последовательность из 1 и 0.

Например, мы могли бы эмулировать псевдослучайную генерацию 0 и 1, извлекая микросекунды из системных часов через определенные промежутки времени, предполагая, что значение микросекунд будет четным или нечетным довольно случайным образом, если мы разнесем каждый вызовнемного времени.

Например, что-то вроде этого:

SELECT n.i
  FROM ( SELECT MICROSECOND(SYSDATE(6)) MOD 2 AS i, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
       ) n

возвращает:

     i  
  ----
     0
     0
     1
     1
     0
     1  

ПРИМЕЧАНИЕ: этот ответ "да", естьдругие способы генерирования 1 и 0. Этот ответ не предполагает, что демонстрация здесь - это лучший способ. Это просто пример запроса, который генерирует серию из 1 и 0.


Существуют другие выражения с RAND(), которые генерируют 0 или 1, например,

ROUND(RAND()*1000,0) MOD 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...