簡體   English   中英

SQL:從同一表和同一列中選擇,只是計數不同

[英]SQL: select from same table and same column, just different counts

我有一個名為names的表,我想在被count(*)作為uniq之后選擇2個名字,然后僅從整個樣本池中選擇另外2個名字。

firstname
John
John
Jessica
Mary
Jessica
John
David
Walter

因此,前兩個名稱將從JohnJessicaMary等的組合中選擇,從而給他們相等的機會,而后兩個名稱將從整個組合中選擇,因此, JohnJessica明顯偏見將具有多個行。

我敢肯定有辦法做到這一點,但我只是想不通。 我想做類似的事情

SELECT uniq.firstname 
FROM (SELECT firstname, count(*) as count from names GROUP BY firstname) uniq
limit 2
AND
SELECT firstname
FROM (SELECT firstname from names) limit 2

這可能嗎? 感謝任何指針。

我認為您很親密,但是您需要一些隨機性進行采樣:

(SELECT uniq.firstname 
 FROM (SELECT firstname, count(*) as count from names GROUP BY firstname) uniq
 ORDER BY rand()
 limit 2
)
UNION ALL
(SELECT firstname
 FROM from names
 ORDER BY rand()
 limit 2
)

如此處所述您可以根據數據庫使用RAND或類似函數來實現它。

MySQL:

SELECT firstname 
FROM (SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname) 
ORDER BY RAND()
LIMIT 2

PostgreSQL:

SELECT firstname 
FROM (SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname)  
ORDER BY RANDOM()
LIMIT 2

Microsoft SQL Server:

SELECT TOP 2 firstname 
FROM (SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname) 
ORDER BY NEWID()

IBM DB2:

SELECT firstname , RAND() as IDX 
FROM (SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname) 
ORDER BY IDX FETCH FIRST 2 ROWS ONLY

甲骨文:

SELECT firstname 
FROM(SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname ORDER BY dbms_random.value )
WHERE rownum in (1,2)

遵循類似的方法從整個池中進行選擇

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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