Mysql 列随机值上的不同
我需要从桌上拿出12个问题。我有一个名为bucket的字段,它可能有重复的值。 在获取时,我只需要获取唯一的bucket值,行数必须为12 这是我的疑问:Mysql 列随机值上的不同,mysql,postgresql,distinct-on,Mysql,Postgresql,Distinct On,我需要从桌上拿出12个问题。我有一个名为bucket的字段,它可能有重复的值。 在获取时,我只需要获取唯一的bucket值,行数必须为12 这是我的疑问: select * from ( select DISTINCT ON (q.bucket) bucket, row_number() over (partition by dl.value order by random()) as rn, row_number() over (part
select *
from (
select
DISTINCT ON (q.bucket) bucket,
row_number() over (partition by dl.value order by random()) as rn,
row_number() over (partition by dl.value, LOWER(qc.value) = LOWER('general') order by random()) as rnc,
dl.value, qc.value as question_category,
q.question_text, q.option_a, q.option_b, q.option_c, q.option_d,
q.correct_answer, q.image_link, q.question_type
from
questions_bank q
inner join
question_category qc on qc.id = q.question_category_id
inner join
sports_type st on st.id = q.sports_type_id
inner join
difficulty_level dl on dl.id = q.difficulty_level_id
where st.game_type = lower('cricket') and dl.value in ('E','M','H')
) s
where
(value = 'E' and rnc <= 3 and LOWER(question_category) != LOWER('general')) or
(value = 'E' and rnc <= 3 and LOWER(question_category) = LOWER('general')) or
value = 'M' and rn <= 4 or
value = 'H' and rn <= 2;
谁能告诉我我做错了什么?它有时不返回12行。只要找到相同的bucket值,就会发生这种情况。我认为,只要应用distinct,重复行的值就会被删除。因此,当我这样做的时候,你期望这会做什么??其中value='E'和rnc基本上,我在获取bucket字段的不同值的同时,还做了很多其他的事情。我需要3个一般类的简单问题,3个非一般类的简单问题,4个中等问题和2个硬问题。总共12个问题。这些3,3,4,2的值可以变化。是的,但是在where子句中,你做的是真的还是假的,这都是真的。你可以这样说:where value='M'和rn那么简单的问题呢?我想说的是,这个子句总是正确的。如果你把它放在哪里=1或a=1,这将始终为真,因为a只能等于或不等于。就好像你把它放在哪里一样=当a=1时,它就一直是假的。这意味着where子句没有任何意义。你希望它做什么??其中value='E'和rnc基本上,我在获取bucket字段的不同值的同时,还做了很多其他的事情。我需要3个一般类的简单问题,3个非一般类的简单问题,4个中等问题和2个硬问题。总共12个问题。这些3,3,4,2的值可以变化。是的,但是在where子句中,你做的是真的还是假的,这都是真的。你可以这样说:where value='M'和rn那么简单的问题呢?我想说的是,这个子句总是正确的。如果你把它放在哪里=1或a=1,这将始终为真,因为a只能等于或不等于。就好像你把它放在哪里一样=当a=1时,它就一直是假的。这意味着where子句没有任何意义。