[SQL] 오라클 키워드 "으로 파티션"
SQL오라클 키워드 "으로 파티션"
하나를 사용하려는 이유 누군가가 키워드로 파티션이 무엇을 설명하고뿐만 아니라 같은 행동에 그것의 간단한 예제를 적어주세요 수 있습니까? 나는 다른 사람에 의해 작성된 SQL 쿼리를 가지고 있고 나는 그것이 무엇을 알아 내려고 노력하고있어.
하여 파티션의 예 :
SELECT empno, deptno, COUNT(*)
OVER (PARTITION BY deptno) DEPT_COUNT
FROM emp
나는 온라인 봤어요 예제는 심도도 조금 보인다.
해결법
-
==============================
1.PARTITION BY 절은 OVER 절 내의 각 "그룹"에 사용되는 기록의 범위를 설정합니다.
PARTITION BY 절은 OVER 절 내의 각 "그룹"에 사용되는 기록의 범위를 설정합니다.
귀하의 예를 들어 SQL에서 DEPT_COUNT는 모든 직원 레코드를 해당 부서 내 직원의 수를 반환합니다. (당신은 emp 테이블을 드 nomalising있는 것과 같다, 당신은 여전히 emp 테이블의 모든 레코드를 반환합니다.)
emp_no dept_no DEPT_COUNT 1 10 3 2 10 3 3 10 3 <- three because there are three "dept_no = 10" records 4 20 2 5 20 2 <- two because there are two "dept_no = 20" records
다른 열이 있다면 (예를 들어, 상태) 당신은 얼마나 많은 부서에서 그 국가를 셀 수 있습니다.
그것은 (즉 일치하는 레코드를 제거하는) 결과 집합을 응집없이 (SUM, AVG 등) 그룹의 결과를 얻는 것과 같다.
당신은, 예를 들면, 최저 및 최고 부서에서 급여 다음은 하위없이이 기록 급여에 대한 계산에 훨씬 더 빨리, 이는 선택하는 것이 사용 얻을 수있는 마지막 OVER 또는 MIN OVER 기능을 사용할 때 유용합니다.
자세한 내용은 링크 된 AskTom 문서를 참조하십시오.
-
==============================
2.개념은 아주 잘 허용 대답으로 설명하지만, 내가 더 예를 들어 하나가 보는 것을 발견, 더 나은이의 싱크 다음 증분 예입니다. :
개념은 아주 잘 허용 대답으로 설명하지만, 내가 더 예를 들어 하나가 보는 것을 발견, 더 나은이의 싱크 다음 증분 예입니다. :
1) 보스는 "우리는 브랜드별로 그룹화 재고가 나에게 항목의 번호를"말한다
당신은 말한다 : "문제 없음"
SELECT BRAND ,COUNT(ITEM_ID) FROM ITEMS GROUP BY BRAND;
결과:
+--------------+---------------+ | Brand | Count | +--------------+---------------+ | H&M | 50 | +--------------+---------------+ | Hugo Boss | 100 | +--------------+---------------+ | No brand | 22 | +--------------+---------------+
2) 사장은 "이제 각각의 브랜드가 가지고있는 아이템의 브랜드와 번호, 나에게 모든 항목의 목록을"말한다
당신은 시도 할 수 있습니다 :
SELECT ITEM_NR ,BRAND ,COUNT(ITEM_ID) FROM ITEMS GROUP BY BRAND;
하지만 당신은 얻을 :
ORA-00979: not a GROUP BY expression
OVER (BRAND BY PARTITION)이 들어오는 곳이다 :
SELECT ITEM_NR ,BRAND ,COUNT(ITEM_ID) OVER (PARTITION BY BRAND) FROM ITEMS;
어떤 수단 :
그리고 그 결과는 다음과 같습니다
+--------------+---------------+----------+ | Items | Brand | Count() | +--------------+---------------+----------+ | Item 1 | Hugo Boss | 100 | +--------------+---------------+----------+ | Item 2 | Hugo Boss | 100 | +--------------+---------------+----------+ | Item 3 | No brand | 22 | +--------------+---------------+----------+ | Item 4 | No brand | 22 | +--------------+---------------+----------+ | Item 5 | H&M | 50 | +--------------+---------------+----------+
기타...
-
==============================
3.이 분석라는 SQL 확장이다. 은 "이상은"select 문에서 함수가 분석 기능, 기능에 의해 그룹에없는 것을 오라클을 알려줍니다. 분석을 사용하는 장점은 대신 하위 선택하거나 악화, PL / SQL과 데이터를 통해 반복의 데이터를 하나의 패스로 더 많은 금액, 횟수를 수집 할 수 있다는 것입니다.
이 분석라는 SQL 확장이다. 은 "이상은"select 문에서 함수가 분석 기능, 기능에 의해 그룹에없는 것을 오라클을 알려줍니다. 분석을 사용하는 장점은 대신 하위 선택하거나 악화, PL / SQL과 데이터를 통해 반복의 데이터를 하나의 패스로 더 많은 금액, 횟수를 수집 할 수 있다는 것입니다.
처음에는 혼란 보입니까하지만이 빨리 제 2의 천성이 될 것입니다. 아무도 더 나은 다음 톰 카이트을 설명합니다. 그래서 위의 링크는 중대하다.
물론, 문서를 읽는 것은 필수입니다.
-
==============================
4.
EMPNO DEPTNO DEPT_COUNT
7839 10 4 5555 10 4 7934 10 4 7782 10 4 --- 4 records in table for dept 10 7902 20 4 7566 20 4 7876 20 4 7369 20 4 --- 4 records in table for dept 20 7900 30 6 7844 30 6 7654 30 6 7521 30 6 7499 30 6 7698 30 6 --- 6 records in table for dept 30
여기에서 우리는 각각의 DEPTNO에 대한 카운트를 얻고있다. DEPTNO (10)에 관해서는 우리는 또한 DEPTNO 20 및 30에 대한 테이블 EMP 비슷한 결과 4 개 기록을 가지고있다.
-
==============================
5.우리가 CLIENT_ID하여 데이터를 분할하는 것처럼 이상의 파티션 키워드는 각 클라이언트 ID의 생성 A는 집합
우리가 CLIENT_ID하여 데이터를 분할하는 것처럼 이상의 파티션 키워드는 각 클라이언트 ID의 생성 A는 집합
select client_id, operation_date, row_number() count(*) over (partition by client_id order by client_id ) as operationctrbyclient from client_operations e order by e.client_id;
이 쿼리는 CLIENT_ID에 의해 수행 작업의 수를 반환합니다
-
==============================
6.나는이 예제 작품으로 작은 파티션이 어떻게 작동하는지에 대한 뉘앙스 방법 그룹을 제안, 생각합니다. 내 예제는 컴파일의 버그가 발생하는 경우 내 예는, 오라클 (12)이다.
나는이 예제 작품으로 작은 파티션이 어떻게 작동하는지에 대한 뉘앙스 방법 그룹을 제안, 생각합니다. 내 예제는 컴파일의 버그가 발생하는 경우 내 예는, 오라클 (12)이다.
나는 시도했다 :
SELECT t.data_key , SUM ( CASE when t.state = 'A' THEN 1 ELSE 0 END) OVER (PARTITION BY t.data_key) count_a_rows , SUM ( CASE when t.state = 'B' THEN 1 ELSE 0 END) OVER (PARTITION BY t.data_key) count_b_rows , SUM ( CASE when t.state = 'C' THEN 1 ELSE 0 END) OVER (PARTITION BY t.data_key) count_c_rows , COUNT (1) total_rows from mytable t group by t.data_key ---- This does not compile as the compiler feels that t.state isn't in the group by and doesn't recognize the aggregation I'm looking for
예상대로 그러나 이것은 작동합니다 :
SELECT distinct t.data_key , SUM ( CASE when t.state = 'A' THEN 1 ELSE 0 END) OVER (PARTITION BY t.data_key) count_a_rows , SUM ( CASE when t.state = 'B' THEN 1 ELSE 0 END) OVER (PARTITION BY t.data_key) count_b_rows , SUM ( CASE when t.state = 'C' THEN 1 ELSE 0 END) OVER (PARTITION BY t.data_key) count_c_rows , COUNT (1) total_rows from mytable t;
외부 키 "data_key"에 기초하여 각각의 상태에서 소자의 개수를 생성한다. 그래서, 만약, data_key = 'APPLE'는 상태 'A'와 3 행 상태 'B'와 2 행 상태 'C', 'APPLE'것 'APPLE'에 해당하는 행, 3, 2 행을 가지고 1, 6.
from https://stackoverflow.com/questions/561836/oracle-partition-by-keyword by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 열에 고유 값의 수를 찾을 수 SQL (0) | 2020.05.06 |
---|---|
[SQL] SQL Server의 트랜잭션의 올바른 사용 (0) | 2020.05.06 |
[SQL] SQL Server의 '테이블을 설명'에 해당 무엇입니까? (0) | 2020.05.06 |
[SQL] 스크립트가 데이터베이스에 모든 연결을 죽일 (더 RESTRICTED_USER ROLLBACK 이상) (0) | 2020.05.06 |
[SQL] 오라클 업데이트 쿼리에 참여하여 (0) | 2020.05.06 |