gpt4 book ai didi

mysql - SQL Distinct - 获取所有值

转载 作者:行者123 更新时间:2023-11-29 08:49:19 25 4
gpt4 key购买 nike

感谢您的查看,我正在尝试从数据库中随机且唯一地获取 20 个条目,因此相同的条目不会出现两次。但我还有一个 QuestionGroup 字段,它也不应该出现两次。我想让该字段与众不同,然后获取所选字段的 ID。

下面是我的不起作用的脚本,因为它的 ID 也不同

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

非常感谢任何建议!

谢谢

最佳答案

尝试首先在子查询中执行 group by/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 等)。它选择其中的 max()。如果没有出现,则取最小值。

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

关于mysql - SQL Distinct - 获取所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com