[SQL] 각 카테고리에서 MYSQL 하나를 선택 랜덤 기록
SQL각 카테고리에서 MYSQL 하나를 선택 랜덤 기록
나는 이런 식으로 뭔가를 보이는 항목 테이블이있는 데이터베이스가 :
id
name
category (int)
수십만 기록이있다. 각 항목은 카테고리 테이블에 대응하는 7 개 개의 다른 카테고리들 중 하나 일 수있다 :
id
category
나는 각 카테고리에서 1 개 임의 항목을 선택 쿼리를합니다. 뭐죠에 접근하는 가장 좋은 방법? 나는 랜드 ()와 유사한 임의 쿼리 1 조작 LIMIT에 의해 주문을 사용하는 알지만,이 같은 결코 완료 뭔가를했습니다.
해결법
-
==============================
1.이 쿼리는 임의의 순서로 범주에 가입하는 모든 항목을 반환합니다 :
이 쿼리는 임의의 순서로 범주에 가입하는 모든 항목을 반환합니다 :
SELECT c.id AS cid, c.category, i.id AS iid, i.name FROM categories c INNER JOIN items i ON c.id = i.category ORDER BY RAND()
일부 그룹에 의해 쿼리를 감싸, 하나에 각 범주를 제한하려면 :
SELECT * FROM ( SELECT c.id AS cid, c.category, i.id AS iid, i.name FROM categories c INNER JOIN items i ON c.id = i.category ORDER BY RAND() ) AS shuffled_items GROUP BY cid
쿼리 BY 절 GROUP BY와 ORDER 모두이있는 경우, 그룹화 정렬하기 전에 수행합니다. 나는 두 개의 쿼리를 사용하는 이유이다 : 첫 번째는 결과, 두 번째 그룹 결과를 정렬합니다.
나는이 쿼리는 어떤 인종 승리하지 않을 것으로 알고 있습니다. 나는 제안에 열려입니다.
-
==============================
2.여기서 단순한 솔루션이다. 이 테이블이 있다고 가정하자.
여기서 단순한 솔루션이다. 이 테이블이 있다고 가정하자.
id name category 1 A 1 2 B 1 3 C 1 4 D 2 5 E 2 6 F 2 7 G 3 8 H 3 9 I 3
이 쿼리를 사용하여
select c.id, c.category, (select name from category where category = c.category group by id order by rand() limit 1) as CatName from category as c group by category
-
==============================
3.이 시도
이 시도
SELECT id, name, category from Items where ( select count(*) from Items i where i.category = Items.category GROUP BY i.category ORDER BY rand() ) <= 1
REF : http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
-
==============================
4.참고 : 다음 예제 난 당신이 또한 다른 테이블 "범주"(대문자로하지 두 번째 테이블 이름)라는 이름의 한 말했기 때문에 테이블이 없습니다 "항목" "항목"라는 가정입니다.
참고 : 다음 예제 난 당신이 또한 다른 테이블 "범주"(대문자로하지 두 번째 테이블 이름)라는 이름의 한 말했기 때문에 테이블이 없습니다 "항목" "항목"라는 가정입니다.
당신이 대략 것 수행 할 작업에 대한 SQL :
`SELECT items.id AS item_id, items.name AS item_name, items.category AS item_category_id, categories.id AS category_id, categories.category AS category_name FROM items, category WHERE items.category = categories.id ORDER BY rand() LIMIT 1`
from https://stackoverflow.com/questions/14245275/mysql-select-one-random-record-from-each-category by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 두 날짜 사이의 일 수 - ANSI SQL (0) | 2020.07.09 |
---|---|
[SQL] C # 및 SQL Server 관리 Studio에서 SQL 쿼리의 매우 다른 실행 시간 (0) | 2020.07.09 |
[SQL] SQL Server의 조항에 해당하여 ORACLE 연결 (0) | 2020.07.09 |
[SQL] 어떻게 SQL과 "이적 그룹"레이블을? (0) | 2020.07.09 |
[SQL] SQL 서버의 칼럼에서 변환 행 값 (PIVOT) (0) | 2020.07.08 |