MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Bagaimana RAND() Bekerja di MariaDB

Di MariaDB, RAND() adalah fungsi bawaan yang mengembalikan DOUBLE random acak nilai floating point presisi v dalam rentang 0 <= v < 1.0 .

Sintaks

RAND() dapat digunakan dengan dua cara berikut:

RAND()
RAND(N)

Dimana N adalah bilangan bulat konstan untuk digunakan sebagai nilai benih.

Saat nilai benih digunakan, RAND() menghasilkan urutan nilai kolom yang dapat diulang.

Contoh

Berikut adalah contoh untuk mendemonstrasikan RAND() tanpa menentukan nilai benih:

SELECT RAND();

Hasil:

+---------------------+
| RAND()              |
+---------------------+
| 0.14470310708945908 |
+---------------------+

Contoh – Dengan Benih

Berikut adalah contoh untuk mendemonstrasikan RAND() dengan nilai benih:

SELECT RAND(3);

Hasil:

+--------------------+
| RAND(3)            |
+--------------------+
| 0.9057697559760601 |
+--------------------+

Kami sebenarnya tidak bisa membedakannya saat menggunakan contoh di atas. Untuk melihat perbedaannya, kita perlu membuat beberapa panggilan fungsi menggunakan seed yang sama.

Seperti ini:

SELECT 
    RAND(3),
    RAND(3),
    RAND(3);

Hasil:

+--------------------+--------------------+--------------------+
| RAND(3)            | RAND(3)            | RAND(3)            |
+--------------------+--------------------+--------------------+
| 0.9057697559760601 | 0.9057697559760601 | 0.9057697559760601 |
+--------------------+--------------------+--------------------+

Kita dapat melihat bahwa ketiga panggilan menghasilkan nilai yang sama.

Inilah yang terjadi jika kita menghilangkan nilai benih:

SELECT 
    RAND(),
    RAND(),
    RAND();

Hasil:

+--------------------+---------------------+---------------------+
| RAND()             | RAND()              | RAND()              |
+--------------------+---------------------+---------------------+
| 0.7037061310407763 | 0.08442136466914915 | 0.31098846095706195 |
+--------------------+---------------------+---------------------+

Setiap panggilan mengembalikan nilai yang berbeda.

Integer Acak dalam Rentang

Kita dapat menggabungkan RAND() dengan FLOOR() , bersama dengan beberapa perhitungan, untuk mengembalikan bilangan bulat acak dalam suatu rentang.

Sintaks untuk melakukan ini seperti ini:

FLOOR(min_value + RAND() * (max_value - min_value +1))

Jadi, kita dapat melakukan hal berikut untuk mengembalikan bilangan bulat acak antara 1 dan 10:

SELECT FLOOR(1 + RAND() * (10 - 1 +1));

Hasil:

+---------------------------------+
| FLOOR(1 + RAND() * (10 - 1 +1)) |
+---------------------------------+
|                               6 |
+---------------------------------+

Mari kita sebut lagi untuk melihat efek acak:

SELECT 
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r1,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r2,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r3,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r4,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r5,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r6,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r7,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r8;

Hasil:

+----+----+----+----+----+----+----+----+
| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |
+----+----+----+----+----+----+----+----+
|  3 |  6 | 10 |  4 |  6 | 10 |  1 |  6 |
+----+----+----+----+----+----+----+----+

Mengembalikan Baris Acak dari Tabel

RAND() dapat digunakan bersama dengan ORDER BY klausa dan LIMIT kata kunci untuk mengembalikan baris acak dari tabel database:

SELECT  
    PetId,
    PetName
FROM Pets 
ORDER BY RAND() 
LIMIT 5;

Contoh hasil:

+-------+---------+
| PetId | PetName |
+-------+---------+
|     5 | Tweet   |
|     7 | Bark    |
|     1 | Fluffy  |
|     8 | Meow    |
|     3 | Scratch |
+-------+---------+

Dan jika saya menjalankannya lagi, saya mendapatkan ini:

+-------+---------+
| PetId | PetName |
+-------+---------+
|     3 | Scratch |
|     8 | Meow    |
|     4 | Wag     |
|     7 | Bark    |
|     6 | Fluffy  |
+-------+---------+

Dan seterusnya…

Meskipun, perlu diingat bahwa ini cukup intensif, dan tidak boleh digunakan pada tabel yang lebih besar. Lihat Pengambilan Sampel Data:Teknik untuk Menemukan Baris Acak Secara Efisien di situs web MariaDB untuk teknik yang lebih cocok untuk tabel yang lebih besar.

Benih Non-Numerik

Berikut adalah contoh yang terjadi saat kami memberikan nilai benih non-numerik:

SELECT RAND('five');

Hasil:

+---------------------+
| RAND('five')        |
+---------------------+
| 0.15522042769493574 |
+---------------------+
1 row in set, 1 warning (0.000 sec)

Mari kita lihat peringatannya:

SHOW WARNINGS;

Hasil:

+---------+------+-------------------------------------------+
| Level   | Code | Message                                   |
+---------+------+-------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: 'five' |
+---------+------+-------------------------------------------+

Juga, ini cenderung mengembalikan hasil yang sama, terlepas dari benih non-numerik mana yang digunakan. Misalnya, jika saya melempar benih non-numerik yang berbeda, saya mendapatkan hasil yang sama:

SELECT 
    RAND('one'),
    RAND('two'),
    RAND('three');

Hasil:

+---------------------+---------------------+---------------------+
| RAND('one')         | RAND('two')         | RAND('three')       |
+---------------------+---------------------+---------------------+
| 0.15522042769493574 | 0.15522042769493574 | 0.15522042769493574 |
+---------------------+---------------------+---------------------+
1 row in set, 3 warnings (0.000 sec)

Periksa peringatannya:

SHOW WARNINGS;

Hasil:

+---------+------+--------------------------------------------+
| Level   | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: 'one'   |
| Warning | 1292 | Truncated incorrect INTEGER value: 'two'   |
| Warning | 1292 | Truncated incorrect INTEGER value: 'three' |
+---------+------+--------------------------------------------+

Argumen Null

RAND() mengembalikan nilai yang sama ketika benih null :

SELECT 
    RAND(null),
    RAND(null),
    RAND(null);

Hasil:

+---------------------+---------------------+---------------------+
| RAND(null)          | RAND(null)          | RAND(null)          |
+---------------------+---------------------+---------------------+
| 0.15522042769493574 | 0.15522042769493574 | 0.15522042769493574 |
+---------------------+---------------------+---------------------+

Meskipun, dalam hal ini, tidak ada peringatan.

Terlalu Banyak Argumen

Memanggil RAND() dengan terlalu banyak argumen menghasilkan kesalahan:

SELECT RAND(1, 2);

Hasil:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'RAND'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana TIME_TO_SEC() Bekerja di MariaDB

  2. Bagaimana PERIOD_DIFF() Bekerja di MariaDB

  3. Kerberos untuk SQLyog oleh MariaDB Connector/C

  4. MIN() Fungsi di MariaDB

  5. Bagaimana EXP() Bekerja di MariaDB