반응형
SQLite - RAND()로 주문
MySQL에서는 RAND() 함수를 사용할 수 있는데 SQLite 3에서는 대체 기능이 있나요?
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
SELECT foo FROM bar
WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
LIMIT 1;
편집(QOP 기준): SQLite Autoincremented 열의 문서는 다음과 같이 기술되어 있습니다.
위에서 설명한 일반 ROWID 선택 알고리즘에서는 최대 ROWID 값을 사용하지 않고 ROWID가 가장 큰 테이블 내의 엔트리를 삭제하지 않는 한 단조롭게 증가하는 고유 ROWID가 생성됩니다.행을 삭제할 경우 이전에 삭제된 행의 ROWID가 새 행을 작성할 때 재사용될 수 있습니다.
위의 내용은 고객님이 가지고 있지 않은 경우에만 해당됩니다.INTEGER PRIMARY KEY AUTOINCREMENT
column (계속 정상적으로 동작합니다)INTEGER PRIMARY KEY
열)을 클릭합니다.어쨌든, 이것은 보다 휴대성/신뢰성이 높아집니다.
SELECT foo FROM bar
WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;
ROWID
,_ROWID_
그리고.OID
는 SQLite 내부 행 ID의 모든 에일리어스입니다.
해결:
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
성능을 크게 향상시키려면 SQLite에서 다음을 사용하십시오.
SELECT * FROM table WHERE id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT x)
이는 MySQL에도 해당됩니다.SQL 엔진이 먼저 행의 투영 필드를 메모리에 로드한 후 정렬합니다.여기서는 행의 ID 필드를 로드하고 랜덤으로 정렬하면 X개의 행을 얻을 수 있으며 기본적으로 인덱싱된 이러한 X ID의 전체 행을 찾을 수 있습니다.
언급URL : https://stackoverflow.com/questions/1253561/sqlite-order-by-rand
반응형
'source' 카테고리의 다른 글
Java socket API: 연결이 종료되었는지 확인하는 방법 (0) | 2023.01.15 |
---|---|
Laravel 데이터베이스에서 모델을 새로고침/새로 고치는 방법 (0) | 2023.01.15 |
PHP/MySQL 행을 삽입한 후 'id'를 가져옵니다. (0) | 2023.01.15 |
마우스 위치 가져오기 (0) | 2023.01.12 |
Level이 되는가?FINE 로깅 메시지가 표시되지 않습니까? (0) | 2023.01.12 |