Mysql SQL Distinct-获取所有值

Mysql SQL Distinct-获取所有值,mysql,sql,Mysql,Sql,感谢您的关注,我正在尝试从数据库中随机获得20个条目,并且是唯一的,这样相同的条目不会出现两次。但我也有一个questionGroup字段,它也不应该出现两次。我希望使该字段不同,但随后获取所选字段的ID 下面是我的非工作脚本,因为它的ID也不同,这 SELECT DISTINCT `questionGroup`,`id` FROM `questions` WHERE `area`='1' ORDER BY rand() LIMIT 20 任何建议都将不胜感激 谢谢请尝试在子查询中首先按

感谢您的关注,我正在尝试从数据库中随机获得20个条目,并且是唯一的,这样相同的条目不会出现两次。但我也有一个questionGroup字段,它也不应该出现两次。我希望使该字段不同,但随后获取所选字段的ID

下面是我的非工作脚本,因为它的ID也不同,这

SELECT DISTINCT `questionGroup`,`id` 
FROM `questions` 
WHERE `area`='1' 
ORDER BY rand() LIMIT 20
任何建议都将不胜感激


谢谢

请尝试在子查询中首先按/distinct进行分组:

select *
from (select distinct `questionGroup`,`id`
      from `questions`
      where `area`='1'
     ) qc
order by rand() 
limit 20
我明白了。您需要从每个组中随机选择一行,然后将其限制为20组。这是一个更难的问题。我不确定在mysql中,不使用变量或表外的单个查询是否可以准确地做到这一点

以下是一个近似值:

select *
from (select `questionGroup`
             coalesce(max(case when rand()*num < 1 then id end), min(id)) as id
      from `questions` q join
            (select questionGroup, count(*) as num
             from questions
             group by questionGroup
            ) qg
            on qg.questionGroup = q.questionGroup
      where `area`='1'
      group by questionGroup
     ) qc
order by rand() 
limit 20
这使用rand来选择一个id,每个分组平均取两个,但它是随机的,所以有时是0、1、2等等。。它选择其中的最大值。如果没有出现,则取最小值

如果您在等式中切换最小值和最大值,这将稍微偏离最大id或最小值。对于大多数应用程序,我不确定这种偏差是否会产生很大的影响。在其他支持排名功能的数据库中,您可以直接解决这个问题。

类似这样的问题

SELECT DISTINCT *
FROM (
    SELECT `questionGroup`,`id` 
    FROM `questions`
    WHERE `area`='1' 
    ORDER BY rand()
) As q
LIMIT 20

这个概念不错,但它不起作用,因为你从某个地方选择的所有东西都只选择了不同的组和id。id不需要是不同的,因为它会查找不同的id和问题组,而这不会起作用,因为id是唯一的。因此,我只需要不同的问题组,但想要提取该结果的ID。我要查找的结果需要类似于select distinctquestionGroup,ID的内容,但不幸的是,您不能将其作为查询来执行:您能提供一些示例数据和示例结果集吗?从这个问题上看,你的目标并不明确。