[SQL] 어떻게 각 그룹의 첫 번째 N 행을 선택하려면?
SQL어떻게 각 그룹의 첫 번째 N 행을 선택하려면?
이 같은 두 SQLite는 테이블을 가지고 :
AuthorId | AuthorName
----------------------
1 | Alice
2 | Bob
3 | Carol
... | ....
BookId | AuthorId | Title
----------------------------------
1 | 1 | aaa1
2 | 1 | aaa2
3 | 1 | aaa3
4 | 2 | ddd1
5 | 2 | ddd2
... | ... | ...
19 | 3 | fff1
20 | 3 | fff2
21 | 3 | fff3
22 | 3 | fff4
내가 처음 N 각 AuthorId, 제목에 의해 주문 (예를 들어, 2 개) 행을 반환하는 SELECT 쿼리를 만들고 싶어 ( "각 저자의 첫 두 권의 책을 선택").
샘플 출력 :
BookId | AuthorId | AuthorName | Title
------------------------------------------
1 | 1 | Alice | aaa1
2 | 1 | Alice | aaa1
4 | 2 | Bob | ddd1
5 | 2 | Bob | ddd2
19 | 3 | Carol | fff1
20 | 3 | Carol | fff2
어떻게이 쿼리를 만들 수 있습니까?
(예) 나는 유사한 주제를 발견하고, 나는 단지 하나의 행 (최초 또는 최고 반환하는 방법을 알고있다. 문제는 두 사람과 함께있다).
해결법
-
==============================
1.당신은 상관 하위 쿼리를 사용하여 계산을 수행 할 수 있습니다 :
당신은 상관 하위 쿼리를 사용하여 계산을 수행 할 수 있습니다 :
SELECT b.BookId, a.AuthorId, a.AuthorName, b.Title FROM Author a join Book b on a.AuthorId = b.AuthorId where (select count(*) from book b2 where b2.bookId <= b.BookId and b2.AuthorId = b.AuthorId ) <= 2;
작은 데이터베이스에 대해이 잘되어야합니다. 당신이 도서 (AuthorId, bookID로서)에 복합 인덱스를 만드는 경우 해당 쿼리를 도움이 될 것입니다.
-
==============================
2.다른 변형이 있습니다 :
다른 변형이 있습니다 :
SELECT * FROM ( SELECT * FROM BOOK, AUTHOR WHERE BOOK.AUTHORID = AUTHOR.AUTHORID ) T1 WHERE T1.BOOKID IN ( SELECT T2.BOOKID FROM BOOK T2 WHERE T2.AUTHORID = T1.AUTHORID ORDER BY T2.BOOKTITLE LIMIT 2 ) ORDER BY T1.BOOKTITLE
-
==============================
3.여기 당신은 간다. 너무 늦을 수 있지만, 난 그냥 게시물을보고 있습니다. 당신은 <= 2는 당신이 필요로하는 N에 맞게 변경할 수 있습니다.
여기 당신은 간다. 너무 늦을 수 있지만, 난 그냥 게시물을보고 있습니다. 당신은 <= 2는 당신이 필요로하는 N에 맞게 변경할 수 있습니다.
SELECT a.authorid, a.authorname, b.bookid, b.booktitle FROM author a JOIN book b ON b.authorid = b.authorid QUALIFY ROW_NUMBER() OVER (PARTITION BY a.authorid ORDER BY b.booktitle ASC) <=2
from https://stackoverflow.com/questions/17991943/how-to-select-the-first-n-rows-of-each-group by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 테이블에서 두 번째로 큰 또는 세 번째로 큰 항목을 얻는 방법 (0) | 2020.05.22 |
---|---|
[SQL] 오라클 대에는 차이가 존재? (0) | 2020.05.22 |
[SQL] 저장 프로 시저 / 함수는 테이블을 반환 할 수 있나요? (0) | 2020.05.22 |
[SQL] 그것은 다른 아이에 의해 참조되어 있지 않은 경우 삭제 부모 (0) | 2020.05.22 |
[SQL] 공간을 무시 쿼리 (0) | 2020.05.22 |