Mysql SQL Distinct-获取所有值
感谢您的关注,我正在尝试从数据库中随机获得20个条目,并且是唯一的,这样相同的条目不会出现两次。但我也有一个questionGroup字段,它也不应该出现两次。我希望使该字段不同,但随后获取所选字段的ID 下面是我的非工作脚本,因为它的ID也不同,这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 任何建议都将不胜感激 谢谢请尝试在子查询中首先按
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的内容,但不幸的是,您不能将其作为查询来执行:您能提供一些示例数据和示例结果集吗?从这个问题上看,你的目标并不明确。