[英]SQL Distinct - Get all values
感謝您的關注,我試圖從數據庫中隨機獲取20個條目並且是唯一的,因此相同的條目不會出現兩次。 但我也有一個questionGroup字段,也不應該出現兩次。 我想使該字段不同,但隨后獲取所選字段的ID。
下面是我的NOT WORKING腳本,因為它的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等)。 它選擇了這些的max()。 如果沒有,則需要最小值。
這將略微偏離最大id(或最小值,如果您在等式中切換min和max)。 對於大多數應用程序,我不確定這種偏差會產生很大的影響。 在支持排名功能的其他數據庫中,您可以直接解決問題。
像這樣的東西
SELECT DISTINCT *
FROM (
SELECT `questionGroup`,`id`
FROM `questions`
WHERE `area`='1'
ORDER BY rand()
) As q
LIMIT 20
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.