모든 카테고리에서 랜덤으로 2개 레코드 선택 그룹 in MariaDB
MariaDB 온라인 컴파일러에서 다음 결과를 반환하려고 합니다(MySQL의 각 카테고리에서 2개 제품 선택).
데이터베이스의 각 카테고리에서 2개 레코드의 랜덤 그룹 반환test1.csv
.
test1
데이터 집합:
id,name,category
150,apple,fruit
153,orange,fruit
187,kiwi,fruit
189,banana,fruit
142,beef,meat
141,pork,meat
143,rabbit,meat
146,chicken,meat
410,pepsi,drinks
413,milk,drinks
418,coffee,drinks
415,mate,drinks
581,carrot,vegetables
586,tomato,vegetables
589,cucumber,vegetables
582,broccoli,vegetables
MariaDB 컴파일러에서 테스트를 재현합니다. https://onecompiler.com/mariadb/3ymv4a6e6
코드:
-- create
CREATE TABLE test1 (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
category TEXT NOT NULL
);
-- insert
INSERT INTO test1 VALUES (150,'apple','fruit');
INSERT INTO test1 VALUES (153,'orange','fruit');
INSERT INTO test1 VALUES (187,'kiwi','fruit');
INSERT INTO test1 VALUES (189,'banana','fruit');
INSERT INTO test1 VALUES (142,'beef','meat');
INSERT INTO test1 VALUES (141,'pork','meat');
INSERT INTO test1 VALUES (143,'rabbit','meat');
INSERT INTO test1 VALUES (146,'chicken','meat');
INSERT INTO test1 VALUES (410,'pepsi','drinks');
INSERT INTO test1 VALUES (413,'milk','drinks');
INSERT INTO test1 VALUES (418,'coffee','drinks');
INSERT INTO test1 VALUES (415,'mate','drinks');
INSERT INTO test1 VALUES (581,'carrot','vegetables');
INSERT INTO test1 VALUES (586,'tomato','vegetables');
INSERT INTO test1 VALUES (589,'cucumber','vegetables');
INSERT INTO test1 VALUES (582,'broccoli','vegetables');
-- fetch
SET @prev=0,@rownum=0;
SELECT id, name, category
FROM (
SELECT *,
IF( @prev <> category,
@rownum := 1,
@rownum := @rownum+1
) AS rank,
@prev := category,
@rownum
FROM (
SELECT * FROM test1
ORDER BY category, rand()
) random_test1
) test1_ranked
WHERE rank <= 2;
위의 코드와 같이 단일 카테고리와 동일한 카테고리에서 랜덤 레코드 2개만 반환합니다.
주어진 데이터 집합 test1에 대한 의도된 결과의 예는 다음과 같습니다.
2개의 레코드(또는 무작위로 선택한 경우) x 4개의 카테고리(사용 가능한 모든 카테고리는 프로덕션 데이터셋에서 훨씬 더 많음)
예를 들어,
150,apple,fruit
153,orange,fruit
142,beef,meat
141,pork,meat
418,coffee,drinks
415,mate,drinks
589,cucumber,vegetables
582,broccoli,vegetables
임의 선택을 단일 범주가 아닌 모든 범주로 제어/확장하는 방법은 무엇입니까?
By, Rank, Rand 문서 순서를 살펴보았지만 하위 카테고리/그룹 적용에 대한 언급을 찾을 수 없었습니다.
나는 정확한 예상 결과에 대한 유사한 비단뱀과 판다의 예를 발견했습니다: 5. 판다는 그룹별로 줄을 표본으로 삼습니다.
df.groupby('color').apply(lambda x: x.sample(n=3)).reset_index(drop = True)
MariaDb에서 동일한 결과를 얻는 방법은?
당신의 도움에 감사드립니다.
언급URL : https://stackoverflow.com/questions/74303723/random-select-2-records-from-all-categories-groups-in-mariadb
'programing' 카테고리의 다른 글
virtualenv(python3.4), pip install mysql 클라이언트 오류 (0) | 2023.10.26 |
---|---|
워드프레스: 알파벳순으로 previor_post_link / next_post_link? (0) | 2023.10.26 |
WooCommerce PayPal 게이트웨이에서 CORB(크로스 오리진 읽기 차단) 오류 가져오기 (0) | 2023.10.26 |
단일 레포 내에서 디렉토리당 .gitignore를 추가로 가질 수 있습니까? (0) | 2023.10.21 |
nodejs - 인증서 체인에서 자체 서명된 인증서 오류 (0) | 2023.10.21 |