programing

열 순서가 절별 그룹에서 중요합니까?

iphone6s 2023. 5. 27. 09:55
반응형

열 순서가 절별 그룹에서 중요합니까?

두 개의 열이 있는데, 하나는 카디널리티가 매우 높고 다른 하나는 카디널리티가 매우 낮은 열(값의 고유 수)인데, 어떤 순서로 그룹화하는지가 중요합니까?

다음은 예입니다.

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

반응형