Mysql
 sql >> база данни >  >> RDS >> Mysql

Предубедено произволно в SQL?

Трябва да генерирате произволно число на ред и да го претеглите.

В този случай RAND(CHECKSUM(NEWID())) заобикаля оценката "по заявка" на RAND . След това просто го умножете по усилване и ПОРЪДЕТЕ ПО резултата DESC. SUM..OVER ви дава пълен тласък

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

Ако имате изключително различни стойности на усилване (което мисля, че споменахте), бих помислил също да използвам LOG (което е база e), за да изгладя разпределението.

И накрая, ORDER BY NEWID() е случайност, която не взема под внимание усилването. Полезно е да се зарежда RAND, но не само по себе си.

Тази проба е събрана на 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. Грешка в синтаксиса на SQL при зареждане на файл с база данни (възможна грешка във версията?)

  2. Hibernate наследяване, колекции и @OrderedBy суперклас атрибут генерира грешка в MySQL синтаксис

  3. CreateSQLQuery работи, но QueryOver не работи с NHibernate

  4. Персонализиране на клавишни комбинации в MySql Workbench

  5. Извличане на конкретни полета от текстов файл