[SQL] 어떻게 SQL에서 필드 값 당 행의 수를 제한 할 수 있습니까?
SQL어떻게 SQL에서 필드 값 당 행의 수를 제한 할 수 있습니까?
예를 들어, 나는 하이브에서이 같은 테이블이 있습니다 :
1 1
1 4
1 8
2 1
2 5
3 1
3 2
나는 첫 번째 열의 각각의 고유 한 값의 처음 두 행을 반환하고자합니다. 나는 이것이 내가보고를 위해 MySQL을로 하이브에서 전송하는 데이터의 양을 제한 할 수 있어야합니다. 나는 나에게이 제공하는 하나의 HiveQL 쿼리를하고 싶습니다 :
1 1
1 4
2 1
2 5
3 1
3 2
해결법
-
==============================
1.불행하게도 MySQL은 분석 기능이 없습니다. 그래서 당신은 변수를 재생해야합니다. 당신이 자동 증가 필드가 가정하면 :
불행하게도 MySQL은 분석 기능이 없습니다. 그래서 당신은 변수를 재생해야합니다. 당신이 자동 증가 필드가 가정하면 :
mysql> create table mytab ( -> id int not null auto_increment primary key, -> first_column int, -> second_column int -> ) engine = myisam; Query OK, 0 rows affected (0.05 sec) mysql> insert into mytab (first_column,second_column) -> values -> (1,1),(1,4),(2,10),(3,4),(1,4),(2,5),(1,6); Query OK, 7 rows affected (0.00 sec) Records: 7 Duplicates: 0 Warnings: 0 mysql> select * from mytab order by id; +----+--------------+---------------+ | id | first_column | second_column | +----+--------------+---------------+ | 1 | 1 | 1 | | 2 | 1 | 4 | | 3 | 2 | 10 | | 4 | 3 | 4 | | 5 | 1 | 4 | | 6 | 2 | 5 | | 7 | 1 | 6 | +----+--------------+---------------+ 7 rows in set (0.00 sec) mysql> select -> id, -> first_column, -> second_column, -> row_num -> from ( -> select *, -> @num := if(@first_column = first_column, @num:= @num + 1, 1) as row_num, -> @first_column:=first_column as c -> from mytab order by first_column,id) as t,(select @first_column:='',@num: =0) as r; +----+--------------+---------------+---------+ | id | first_column | second_column | row_num | +----+--------------+---------------+---------+ | 1 | 1 | 1 | 1 | | 2 | 1 | 4 | 2 | | 5 | 1 | 4 | 3 | | 7 | 1 | 6 | 4 | | 3 | 2 | 10 | 1 | | 6 | 2 | 5 | 2 | | 4 | 3 | 4 | 1 | +----+--------------+---------------+---------+ 7 rows in set (0.00 sec) mysql> select -> id, -> first_column, -> second_column, -> row_num -> from ( -> select *, -> @num := if(@first_column = first_column, @num:= @num + 1, 1) as row_num, -> @first_column:=first_column as c -> from mytab order by first_column,id) as t,(select @first_column:='',@num: =0) as r -> having row_num<=2; +----+--------------+---------------+---------+ | id | first_column | second_column | row_num | +----+--------------+---------------+---------+ | 1 | 1 | 1 | 1 | | 2 | 1 | 4 | 2 | | 3 | 2 | 10 | 1 | | 6 | 2 | 5 | 2 | | 4 | 3 | 4 | 1 | +----+--------------+---------------+---------+ 5 rows in set (0.02 sec)
-
==============================
2.하이브 솔루션이 될 것입니다
하이브 솔루션이 될 것입니다
SELECT S.col1, S.col2 FROM (SELECT col1, col2, row_number() over (partition by col1) as r FROM mytable) S WHERE S.r < 3
from https://stackoverflow.com/questions/10421807/how-do-i-limit-the-number-of-rows-per-field-value-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 Google BigQuery에서 결석 날짜를 차지 최신 시리즈를 생성? (0) | 2020.06.12 |
---|---|
[SQL] 어떻게 선택적 매개 변수 SQL 쿼리를 처리하기 위해? (0) | 2020.06.12 |
[SQL] 여러 행을 업데이트 할 때 NULL 유형을 주조 (0) | 2020.06.12 |
[SQL] SQL 서버 : 포함 된 VARCHAR (MAX) 필드에서 유효하지 않은 XML 문자를 교체 (0) | 2020.06.12 |
[SQL] MySQL의보기에서 행 순위 (0) | 2020.06.12 |