[英]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
因此,前兩個名稱將從John
, Jessica
和Mary
等的組合中選擇,從而給他們相等的機會,而后兩個名稱將從整個組合中選擇,因此, John
和Jessica
明顯偏見將具有多個行。
我敢肯定有辦法做到這一點,但我只是想不通。 我想做類似的事情
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.