簡體   English   中英

SQL Distinct - 獲取所有值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM