2013-07-04 1 views
1

내부 하위 그룹에서 하나 개의 라인을 멀티 - 선택 :는 SQL 다음 표를 감안할 때 같은 테이블

id | group_s | name 
_____________________ 
1 | 1 | pollo 
2 | 1 | cordero 
3 | 1 | cerdo 
4 | 2 | tomates 
5 | 2 | naranjas 
6 | 2 | manzanas 

나는 무작위로 각 그룹에서 한 줄을 선택하고 싶습니다. 가능한 출력 예 (이 랜덤이기 때문에)

id | group_s | name 
_____________________ 
3 | 1 | cerdo 
5 | 2 | naranjas 

또는

id | group_s | name 
_____________________ 
1 | 1 | pollo 
6 | 2 | manzanas 

등등 ..

I는 그것을 어떻게 알지 못한다. 나는 그 테이블을 다중 선택해야한다고 생각합니다. 이 같은,

SELECT T2.* FROM (
SELECT group_s 
FROM mytable 
GROUP BY group_s ORDER BY RAND() LIMIT 1) AS T1 
JOIN mytable AS T2 
ON T1.group_s = T2.group_s; 

답변

1

무작위로 순서를 얻을 ORDER BY NEWID()와 윈도우 함수 ROW_NUMBER() OVER(PARTITION BY group_s)를 사용 :

    :

    WITH CTE 
    AS 
    (
        SELECT *, 
        ROW_NUMBER() OVER(PARTITION BY group_s 
             ORDER BY newid()) AS RN 
        FROM yourTable 
    ) 
    SELECT id , group_s , name 
    FROM CTE 
    WHERE RN = 1; 
    

    여기에 직접보기 나는 성공없이 다음 시도했다

  • SQL Fiddle Demo
+0

도움을 주셔서 감사합니다. 귀하의 진술을 내 서버에서 작동하도록 만들려고하지만 (해당 테이블을 만든 후에 진술을 붙여 넣으려고합니다) 그렇지 않습니다. 오류 1064 - 오류 sql 구문 -을 표시합니다. SQL Fiddle 데모가 실행 중임을 분명히 알 수 있습니다. 이 MySQL 버전 문제가 될 수 있습니까? –

+0

@ user903645 - 죄송합니다. SQL Server라고 생각했습니다. MySQL을 사용하려고했지만 할 수는 있었지만, Id가 최소로 매번 무작위로 생성되는 것은 아닙니다. [this sql fiddle demo ] (http://www.sqlfiddle.com/#!2/be046/16). MySQL 태그로 질문의 태그를 다시 지정하고 다른 대답을 기다립니다. 정답이 아니기 때문에이 대답을 수락 할 수도 있습니다. 또한 당신은 할 수 *** mysql row_number ***에 의해 파티션을 통해, 당신은 그것을 할 방법을 설명하는 게시물을 많이 찾을 수 있습니다. –