Теперь я пытаюсь сделать случайный выбор из каждого сгруппированного массива столбцов, с шансами, за которыми следует вес каждой строки. Например, у меня есть таблица (DemoTable): http://sqlfiddle.com/#!9/23470/3/0
Name | State | Grade | Weight |
---|---|---|---|
John | NY | 100 | 1 |
Liam | NY | 90 | 2 |
Olivia | NY | 90 | 3 |
Emma | NY | 80 | 4 |
James | CA | 10 | 1 |
Henry | CA | 20 | 1 |
Mia | NJ | 50 | 1 |
Ava | NJ | 30 | 4 |
Для State = 'NY' имеется четыре строки с массивом оценок: [100, 90, 90, 80] и вес [1, 2, 3, 4] соответственно. Таким образом, 80 имеет наибольший шанс быть выбранным, а 100 — наименьший в своей группе штатов. Я сделал запрос для него:
SELECT a.*,
(SELECT b.Grade FROM DemoTable b WHERE a.State = b.State
ORDER BY RAND() * -b.Weight LIMIT 1) AS 'random_val' FROM DemoTable a;
и это сработало с результатом:
Name | State | Grade | Weight | random_val |
---|---|---|---|---|
John | NY | 100 | 1 | 80 |
Liam | NY | 90 | 2 | 80 |
Olivia | NY | 90 | 3 | 80 |
Emma | NY | 80 | 4 | 90 |
James | CA | 10 | 1 | 20 |
Henry | CA | 20 | 1 | 10 |
Mia | NJ | 50 | 1 | 30 |
Ava | NJ | 30 | 4 | 30 |
Тем не менее, я хотел бы знать, есть ли какой-либо другой метод, такой как соединение или объединение, вместо использования только порядка с помощью rand().
Есть ли другой способ изменить мой запрос MySQL, дающий тот же результат?
Я искал решение этой проблемы весь день, но не смог найти правильный способ сделать это; вот поэтому я и обратился сюда за помощью.
Я был бы искренне признателен, если бы я мог получить несколько советов.
RAND()
выполняется независимо для каждой строки, как показано в руководстве... dev.mysql.com/doc/refman/5.7/en/ ) - person MatBailie   schedule 22.06.2021Name
в одном и том жеState
давал разныеrandom_val
? - person MatBailie   schedule 22.06.2021