[SQL] 어떻게 무작위 SQL에서 행을 선택하려면?
SQL어떻게 무작위 SQL에서 행을 선택하려면?
내 DB에 MSSQL 서버 2005을 사용하고, 나는 두 개의 열 "ID"와 "이름"과 약이있는 테이블 "customerNames"가. 1,000 결과.
나는 무작위 때마다 5 개 고객을 선택하는 가지고 기능을 만드는 오전. 쿼리가 실행될 때 사람마다 방법 5 행 무작위로 얻을 것이다 쿼리를 만드는 방법을 가르쳐 (ID, 그리고 이름) 할 수 있습니까?
해결법
-
==============================
1.
SELECT TOP 5 Id, Name FROM customerNames ORDER BY NEWID()
즉 모두가 질문에 대한 일반적인 답변이 페이지에 올 것으로 보인다 말했다 :
SELECT column FROM table ORDER BY RAND() LIMIT 1
SELECT column FROM table ORDER BY RANDOM() LIMIT 1
SELECT TOP 1 column FROM table ORDER BY NEWID()
SELECT column, RAND() as IDX FROM table ORDER BY IDX FETCH FIRST 1 ROWS ONLY
SELECT column FROM ( SELECT column FROM table ORDER BY dbms_random.value ) WHERE rownum = 1
SELECT column FROM table ORDER BY RANDOM() LIMIT 1
-
==============================
2.
SELECT TOP 5 Id, Name FROM customerNames ORDER BY NEWID()
-
==============================
3.경우에는 누군가가 PostgreSQL의 솔루션을 원한다 :
경우에는 누군가가 PostgreSQL의 솔루션을 원한다 :
select id, name from customer order by random() limit 5;
-
==============================
4.아마이 사이트가 도움이 될 것입니다.
아마이 사이트가 도움이 될 것입니다.
클릭을 통해 원하지 않는 사람들을 위해 :
SELECT TOP 1 column FROM table ORDER BY NEWID()
-
==============================
5.2005 특정 솔루션 여기에 좋은 마이크로 소프트 SQL 서버가있다. 당신은 큰 결과 집합 (안 내가 알고있는 질문)와 함께 작업하고있는 문제를 다루고있다.
2005 특정 솔루션 여기에 좋은 마이크로 소프트 SQL 서버가있다. 당신은 큰 결과 집합 (안 내가 알고있는 질문)와 함께 작업하고있는 문제를 다루고있다.
큰 테이블에서 무작위로 행 선택 http://msdn.microsoft.com/en-us/library/cc441928.aspx
-
==============================
6.TABLENAME ORDER BY 임의 () LIMIT 5 SELECT * FROM;
TABLENAME ORDER BY 임의 () LIMIT 5 SELECT * FROM;
-
==============================
7.당신은 성능에 대한 행 및 관리에 수백만 테이블이있는 경우,이 더 나은 해답이 될 수 있습니다 :
당신은 성능에 대한 행 및 관리에 수백만 테이블이있는 경우,이 더 나은 해답이 될 수 있습니다 :
SELECT * FROM Table1 WHERE (ABS(CAST( (BINARY_CHECKSUM (keycol1, NEWID())) as int)) % 100) < 10
https://msdn.microsoft.com/en-us/library/cc441928.aspx
-
==============================
8.이것은 오래된 질문이지만, 엄청나게 비싼 것 많은 수의 행이있는 테이블에 새로운 필드 (중 NEWID () 또는 ORDER BY 랜드를 ())를 적용하려고 시도. 당신이 ID의 X 번호를 계산하는 것이 더 효율적입니다 증가, 고유 ID를 (어떤 구멍이없는) 경우 대신 모든 단일 행에 GUID 또는 이와 유사한을 적용하고 상단의 X 번호를 복용 선택할 수 있습니다.
이것은 오래된 질문이지만, 엄청나게 비싼 것 많은 수의 행이있는 테이블에 새로운 필드 (중 NEWID () 또는 ORDER BY 랜드를 ())를 적용하려고 시도. 당신이 ID의 X 번호를 계산하는 것이 더 효율적입니다 증가, 고유 ID를 (어떤 구멍이없는) 경우 대신 모든 단일 행에 GUID 또는 이와 유사한을 적용하고 상단의 X 번호를 복용 선택할 수 있습니다.
DECLARE @minValue int; DECLARE @maxValue int; SELECT @minValue = min(id), @maxValue = max(id) from [TABLE]; DECLARE @randomId1 int, @randomId2 int, @randomId3 int, @randomId4 int, @randomId5 int SET @randomId1 = ((@maxValue + 1) - @minValue) * Rand() + @minValue SET @randomId2 = ((@maxValue + 1) - @minValue) * Rand() + @minValue SET @randomId3 = ((@maxValue + 1) - @minValue) * Rand() + @minValue SET @randomId4 = ((@maxValue + 1) - @minValue) * Rand() + @minValue SET @randomId5 = ((@maxValue + 1) - @minValue) * Rand() + @minValue --select @maxValue as MaxValue, @minValue as MinValue -- , @randomId1 as SelectedId1 -- , @randomId2 as SelectedId2 -- , @randomId3 as SelectedId3 -- , @randomId4 as SelectedId4 -- , @randomId5 as SelectedId5 select * from [TABLE] el where el.id in (@randomId1, @randomId2, @randomId3, @randomId4, @randomId5)
당신이 () 나는 ID와 랜드의 무리와 함께 #tempTable을 채우기로 볼 것 많은 행을 선택하고자한다면 다음 최소 - 최대 값 규모의 각 랜드 () 값을 사용하여 값. 그런 식으로 당신은 randomId1 ... N 매개 변수 @의 전부를 정의 할 필요가 없습니다. 나는 초기 테이블을 채울 CTE를 사용하여 아래의 예를 포함 시켰습니다.
DECLARE @NumItems int = 100; DECLARE @minValue int; DECLARE @maxValue int; SELECT @minValue = min(id), @maxValue = max(id) from [TABLE]; DECLARE @range int = @maxValue+1 - @minValue; with cte (n) as ( select 1 union all select n+1 from cte where n < @NumItems ) select cast( @range * rand(cast(newid() as varbinary(100))) + @minValue as int) tp into #Nt from cte; select * from #Nt ntt inner join [TABLE] i on i.id = ntt.tp; drop table #Nt;
-
==============================
9.나는 빅 데이터에 가장 적합한이를 발견했다.
나는 빅 데이터에 가장 적합한이를 발견했다.
`SELECT TOP 1 Column_Name FROM dbo.Table TABLESAMPLE(1 PERCENT);`
TABLESAMPLE (N ROWS) 또는 TABLESAMPLE (N %)은 임의 그러나 필요성 TOP을 추가 할 n은 정확한 샘플 크기를 얻는 것입니다.
() NEWID를 사용하여 큰 테이블에 매우 느립니다.
-
==============================
10.이 글에서 설명한 바와 같이, SQL 결과 집합 셔플하기 위해, 당신은 데이터베이스 관련 함수 호출을 사용해야합니다.
이 글에서 설명한 바와 같이, SQL 결과 집합 셔플하기 위해, 당신은 데이터베이스 관련 함수 호출을 사용해야합니다.
그래서, 가정 우리는 다음과 같은 데이터베이스 테이블이 있습니다 :
노래 테이블에 다음과 같은 행 :
| id | artist | title | |----|---------------------------------|------------------------------------| | 1 | Miyagi & Эндшпиль ft. Рем Дигга | I Got Love | | 2 | HAIM | Don't Save Me (Cyril Hahn Remix) | | 3 | 2Pac ft. DMX | Rise Of A Champion (GalilHD Remix) | | 4 | Ed Sheeran & Passenger | No Diggity (Kygo Remix) | | 5 | JP Cooper ft. Mali-Koa | All This Love |
다음에 그 예를 오라클에, 당신은 DBMS_RANDOM.VALUE 기능을 사용합니다 :
SELECT artist||' - '||title AS song FROM song ORDER BY DBMS_RANDOM.VALUE
오라클에 상기 SQL 쿼리를 실행하는 경우, 우리는 다음과 같은 결과 집합을 얻을려고하고있다 :
| song | |---------------------------------------------------| | JP Cooper ft. Mali-Koa - All This Love | | 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) | | HAIM - Don't Save Me (Cyril Hahn Remix) | | Ed Sheeran & Passenger - No Diggity (Kygo Remix) | | Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
다음의 예에 의해 그림과 같이 SQL 서버에, 당신은 NEWID 함수를 사용합니다 :
SELECT CONCAT(CONCAT(artist, ' - '), title) AS song FROM song ORDER BY NEWID()
SQL Server에서 언급 한 SQL 쿼리를 실행하는 경우, 우리는 다음과 같은 결과 집합을 얻을려고하고있다 :
| song | |---------------------------------------------------| | Miyagi & Эндшпиль ft. Рем Дигга - I Got Love | | JP Cooper ft. Mali-Koa - All This Love | | HAIM - Don't Save Me (Cyril Hahn Remix) | | Ed Sheeran & Passenger - No Diggity (Kygo Remix) | | 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
다음의 예에 의해 예시 된 바와 같이 PostgreSQL을에, 당신은, 임의의 기능을 사용합니다 :
SELECT artist||' - '||title AS song FROM song ORDER BY random()
PostgreSQL의에 상기 SQL 쿼리를 실행하는 경우, 우리는 다음과 같은 결과 집합을 얻을려고하고있다 :
| song | |---------------------------------------------------| | 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) | | JP Cooper ft. Mali-Koa - All This Love | | Ed Sheeran & Passenger - No Diggity (Kygo Remix) | | HAIM - Don't Save Me (Cyril Hahn Remix) | | Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
다음의 예에 의해 예시로 MySQL에, 당신은 RAND 함수를 사용합니다 :
SELECT CONCAT(CONCAT(artist, ' - '), title) AS song FROM song ORDER BY RAND()
MySQL을 상기 SQL 쿼리를 실행하는 경우, 우리는 다음과 같은 결과 집합을 얻을려고하고있다 :
| song | |---------------------------------------------------| | HAIM - Don't Save Me (Cyril Hahn Remix) | | Ed Sheeran & Passenger - No Diggity (Kygo Remix) | | Miyagi & Эндшпиль ft. Рем Дигга - I Got Love | | 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) | | JP Cooper ft. Mali-Koa - All This Love |
-
==============================
11.당신이 큰 테이블을 사용하고 데이터의 10 %의 액세스하려는 경우,이 다음 명령을 실행 : 표 1 ORDER BY NEWID () FROM SELECT TOP 10 % *를;
당신이 큰 테이블을 사용하고 데이터의 10 %의 액세스하려는 경우,이 다음 명령을 실행 : 표 1 ORDER BY NEWID () FROM SELECT TOP 10 % *를;
from https://stackoverflow.com/questions/580639/how-to-randomly-select-rows-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] C # .NET을 사용하여 .SQL 스크립트 파일을 실행하는 방법 (0) | 2020.03.16 |
---|---|
[SQL] MySQL의 테이블 열 이름을 얻기? (0) | 2020.03.16 |
[SQL] COUNT (*) 대 수 (1) 대 수 (PK) : 더 나은 무엇입니까? [복제] (0) | 2020.03.16 |
[SQL] SQL 쿼리와 가까운 위도 / 경도 찾기 (0) | 2020.03.16 |
[SQL] 왜 IN 조건은 SQL에서 "="보다 느린 것입니까? (0) | 2020.03.16 |