Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 列随机值上的不同_Mysql_Postgresql_Distinct On - Fatal编程技术网

Mysql 列随机值上的不同

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

我需要从桌上拿出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 (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子句没有任何意义。