sql >> Databáze >  >> RDS >> Sqlserver

Jak vygeneruji náhodné číslo pro každý řádek ve výběru T-SQL?

Podívejte se na SQL Server – Nastavit náhodná čísla, která má velmi podrobné vysvětlení.

Abychom to shrnuli, následující kód generuje náhodné číslo mezi 0 a 13 včetně s rovnoměrným rozdělením:

ABS(CHECKSUM(NewId())) % 14
 

Chcete-li změnit rozsah, stačí změnit číslo na konci výrazu. Buďte zvláště opatrní, pokud potřebujete rozsah, který zahrnuje kladná i záporná čísla. Pokud to uděláte špatně, je možné započítat číslo 0 dvakrát.

Malé varování pro matematické oříšky v místnosti:v tomto kódu je velmi mírná zaujatost. CHECKSUM() výsledkem jsou čísla, která jsou jednotná v celém rozsahu datového typu sql Int, nebo alespoň tak blízko, jak může ukázat mé (editorské) testování. Pokud však CHECKSUM() vytvoří číslo na samém horním konci tohoto rozsahu, dojde k určitému zkreslení. Kdykoli získáte číslo mezi maximálním možným celým číslem a posledním přesným násobkem velikosti požadovaného rozsahu (v tomto případě 14) před tímto maximálním celým číslem, budou tyto výsledky upřednostněny před zbývající částí vašeho rozsahu, kterou nelze získat. poslední násobek 14.

Jako příklad si představte, že celý rozsah typu Int je pouze 19. 19 je největší možné celé číslo, které můžete pojmout. Když je výsledkem CHECKSUM() 14-19, odpovídají výsledky 0-5. Tato čísla by byla těžká upřednostňován před 6-13, protože CHECKSUM() je dvakrát pravděpodobněji vygeneruje. Je snazší to demonstrovat vizuálně. Níže je uvedena celá možná sada výsledků pro náš imaginární rozsah celých čísel:

Kontrolní součet Integer:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19Výsledek rozsahu:0 1 2 3 4 5 6 7 8 9 10 13 23 1 2 1 před> 

Zde můžete vidět, že existuje více šancí vytvořit některá čísla než jiná:zkreslení. Naštěstí je skutečný rozsah typu Int hodně větší... natolik, že ve většině případů je zkreslení téměř nezjistitelné. Je však třeba si toho uvědomit, pokud někdy zjistíte, že to děláte kvůli vážnému bezpečnostnímu kódu.



  1. Tipy pro migraci z HAProxy na ProxySQL

  2. Jak nainstalovat a zabezpečit MariaDB na CentOS 8

  3. 8 nejoblíbenějších databází

  4. jak připojit sql server pomocí ovladače JTDS v systému Android