MySql Запрос на получение определенного количества значений из лимита и порядка по rand () - PullRequest
0 голосов
/ 21 января 2020

В приведенном ниже запросе SQL мне нужно 25 строк, содержащих product = 'y', и 25 строк, содержащих product = 'n'. Продукт - это столбец, имеющий только значение Y / N. В пределе случайных 50 строк мне нужно 25 строк от каждого значения.

SELECT qno 
FROM `wp_question_bank` 
where brand='XYZ' 
and department='DOMESTIC' 
and product = 'y' 
and priority = 'p1' 
ORDER BY RAND() limit 50

Пожалуйста, помогите. Я попробовал Союз, но это не сработало.

Ответы [ 3 ]

1 голос
/ 21 января 2020

Просто используйте UNION для каждого типа продукта:

(SELECT qno
FROM `wp_question_bank`
WHERE brand='XYZ' AND department='DOMESTIC' AND product = 'y' AND priority = 'p1'
ORDER BY RAND()
LIMIT 25)

UNION ALL

(SELECT qno
FROM `wp_question_bank`
WHERE brand='XYZ' AND department='DOMESTIC' AND product = 'n' AND priority = 'p1'
ORDER BY RAND()
LIMIT 25)

0 голосов
/ 21 января 2020

Если у вас достаточно строк каждого типа, вы можете сделать это без подзапроса:

SELECT qno
FROM `wp_question_bank`
WHERE brand = 'XYZ' AND department = 'DOMESTIC' AND
      product IN ('n', 'y') AND priority = 'p1'
ORDER BY ROW_NUMBER() OVER (PARTITION BY product ORDER BY rand())
LIMIT 50;
0 голосов
/ 21 января 2020

Вы можете использовать row_number(), если вы работаете MySQL 8.0:

select qno
from (
    select qno, row_number() over(partition by product order by rand()) rn
    from wp_question_bank
    where brand='XYZ' and department='DOMESTIC' and priority = 'p1'
) t
where rn <= 25 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...