2014-09-15 4 views
0

names이라는 테이블이 있는데, 유니크로 카운트 (*) 한 후 2 개의 이름을 선택한 다음 전체 샘플 풀에서 다른 2 개의 이름 만 선택하려고합니다. . 상기 제 2 이름 전체 풀에서 선택 반면SQL : 동일한 테이블과 동일한 열에서 선택하십시오. 다른 숫자로만 입력하십시오.

firstname 
John 
John 
Jessica 
Mary 
Jessica 
John 
David 
Walter 

그래서 이렇게 명백한 바이어스 될 것이며, 상기 제 2 이름 John, Jessica 풀 선택할 것이고, Mary 등 그들을 선택 될 동일한 기회를주는 복수 행이있는 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 

이게 가능합니까? 모든 포인터를 감사하십시오.

+0

그래서 ... 당신은 두 번 선택하려면 전체 풀에서 선택하는 유사한 접근 방식을 따라,하지만 난 당신의 기준에 안개입니다. 첫 번째 선택에서 두 개의 임의의 이름을 선택 하시겠습니까? 두 번째로 가장 많이 표시되는 두 개의 이름을 선택 하시겠습니까? 선택 기준은 무엇입니까? – JNevill

+0

예. 실제 데이터베이스는 실제로 훨씬 더 큽니다. 단지 일러스트레이션을 위해 단순화했습니다. 첫 번째 선택은 이름에 모든 가능성을 부여하지만 두 번째 선택은 가장 대표적인 것에 편향됩니다. – user1899415

+0

[SQL에서 임의의 행을 선택하는 방법]의 가능한 복제본 (http://stackoverflow.com/questions/580639/how-to-randomly-select-rows-in-sql) – Ram

답변

0

나는 당신이 가까이 생각하지만 당신은 샘플링에 대한 약간의 임의성이 필요합니다

(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 
) 
0

으로 당신이 그것을 데이터베이스에 따라 달성하기 위해 RAND 또는 유사한 기능을 사용할 수 있습니다 here을 언급했다.

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 

마이크로 소프트 SQL 서버 :

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) 

관련 문제