Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Stronniczość losowa w SQL?

Musisz wygenerować losową liczbę na wiersz i zważyć ją.

W tym przypadku RAND(CHECKSUM(NEWID())) omija ocenę "na zapytanie" RAND . Następnie pomnóż to przez doładowanie i ORDER BY wynik DESC. SUM..OVER daje całkowity impuls

DECLARE @sample TABLE (id int, boost int)

INSERT @sample VALUES (1, 1), (2, 2), (3, 7)

SELECT
    RAND(CHECKSUM(NEWID())) * boost  AS weighted,
    SUM(boost) OVER () AS boostcount,
    id
FROM
    @sample
GROUP BY
    id, boost
ORDER BY
    weighted DESC

Jeśli masz szalenie różne wartości doładowania (o których myślę, że wspomniałeś), rozważę również użycie LOG (o podstawie e) do wygładzenia rozkładu.

Wreszcie ORDER BY NEWID() jest losowością, która nie bierze pod uwagę wzmocnienia. Przydatne jest rozsiewanie RAND, ale nie samodzielnie.

Ta próbka została utworzona na SQL Server 2008, BTW



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Z powodu błędu składni tabela nie jest tworzona w DB

  2. Jak często występują pola TIMESTAMPS w polach DATETIME?

  3. Czy zapytania w kolejce MySQL?

  4. Zaktualizuj wiele kolumn dla wielu wierszy w jednym zapytaniu SQL

  5. Jak sformatować numer za pomocą . jako separator tysięcy i jako separator dziesiętny?