열 순서가 절별 그룹에서 중요합니까?
두 개의 열이 있는데, 하나는 카디널리티가 매우 높고 다른 하나는 카디널리티가 매우 낮은 열(값의 고유 수)인데, 어떤 순서로 그룹화하는지가 중요합니까?
다음은 예입니다.
select
dimensionName,
dimensionCategory,
sum(someFact)
from SomeFact f
join SomeDim d on f.dimensionKey = d.dimensionKey
group by
d.dimensionName, -- large number of unique values
d.dimensionCategory -- small number of unique values
그것이 중요한 상황이 있습니까?
아니요, GROUP BY 조항은 주문이 중요하지 않습니다.
MySQL 및 SQLite는 (비표준, 휴대용이 아님) 그룹에서 생략된 열을 선택할 수 있는 유일한 데이터베이스이지만, 순서도 중요하지 않습니다.
SQL은 선언적입니다.
이 경우 최적화 도구에 데이터를 그룹화하는 방법을 알려주면 데이터를 그룹화하는 방법을 알아낼 수 있습니다.
한 줄씩 평가하지 않고(절차) 한 열을 먼저 봅니다.
주요 열 순서 문제는 인덱스에 대한 것입니다. col1, col2와 동일하지 않습니다.col2, col1.조금도.
이것은 여기에 언급되지 않았기 때문입니다.위의 답변은 정답입니다. 즉, "group by" 절 뒤의 열 순서는 쿼리의 정확성(즉, 합계 금액)에 영향을 주지 않습니다.
그러나 검색할 행의 순서는 "group by" 절 뒤에 지정된 열의 순서에 따라 달라집니다.예를 들어 표를 고려합니다.A다음 행을 사용합니다.
Col1 Col2 Col3
1 xyz 100
2 abc 200
3 xyz 300
3 xyz 400
SELECT *, SUM(Col3) FROM A GROUP BY Col2, Col1에서 주문한 행을 검색합니다.Col2오름차순으로
Col1 Col2 Col3 sum(Col3)
2 abc 200 200
1 xyz 100 100
3 xyz 300 700
이제 그룹의 열 순서를 다음으로 변경합니다.Col1, Col2검색된 행은 다음과 같이 정렬됩니다.Col1.
예.select *, sum(Col3) from A group by Col1, Col2
Col1 Col2 Col3 sum(Col3)
1 xyz 100 100
2 abc 200 200
3 xyz 300 700
참고: 합계 금액(즉, 쿼리의 정확성)은 정확히 동일하게 유지됩니다.
Microsoft SQL Server에는 ROLLUP이라는 비표준 레거시 기능이 있습니다. ROLLUP은 GROUP BY 구문의 확장자이며 사용 시 GROUP BY 열의 순서에 따라 결과에서 그룹화할 열이 결정됩니다. 그러나 ROLLUP은 사용되지 않습니다.표준 SQL 대체 방법은 SQL Server 2008 이상 버전에서 지원되는 그룹화 세트를 사용하는 것입니다.
두 개의 열이 있는데, 하나는 카디널리티가 매우 높고 다른 하나는 카디널리티가 매우 낮은 열(값의 고유 수)인데, 어떤 순서로 그룹화하는지가 중요합니까?
쿼리-1
SELECT spec_id, catid, spec_display_value, COUNT(*) AS cnt FROM tbl_product_spec
GROUP BY spec_id, catid, spec_display_value ;
쿼리-2
SELECT spec_id, catid, spec_display_value, COUNT(*) AS cnt FROM tbl_product_spec FORCE INDEX(idx_comp_spec_cnt)
GROUP BY catid, spec_id,spec_display_value;
둘 다 동일하고, 조항별로 그룹으로 순서가 맞지 않습니다.
언급URL : https://stackoverflow.com/questions/3064677/does-the-order-of-columns-matter-in-a-group-by-clause
'programing' 카테고리의 다른 글
| npm은 패키지에 종속성별로 개인 github 저장소를 설치합니다.제이손 (0) | 2023.05.27 |
|---|---|
| Mongoose에서 _id to db 문서를 설정하는 방법? (0) | 2023.05.27 |
| SQL Server 인덱스 이름 지정 규칙 (0) | 2023.05.27 |
| Visual Studio Code에서 서로 다른 분기를 비교하는 방법 (0) | 2023.05.27 |
| Excel에서 Mongodb를 연결하는 방법 (0) | 2023.05.22 |