[SQL] 많은 열이 쿼리에서 하나의 열을 집계
SQL많은 열이 쿼리에서 하나의 열을 집계
내가 쿼리에서 많은 열이있을 때 하나의 열을 집계하는 적절한 방법이 있나요?
나는 작동이 대답을 시도했지만, 내 쿼리는 더 자세한 많은되었다.
나의 현재 쿼리는 다음과 같습니다 :
SELECT t1.foo1, t1.foo2, t2.foo3, t2.foo4, string_agg(t3.aggregated_field, ', ')
FROM tbl1 t1
LEFT JOIN tbl2 t2 ON t1.id = t2.fkeyid
LEFT JOIN tbl3 t3 ON t2.id = t3.fkeyid
GROUP BY t1.foo1, t1.foo2, t2.foo3, t2.foo4, t2.foo5, t2.foo6
ORDER BY t2.foo5, t2.foo6
쿼리는 더 많은 필드를 가지고 있으며, 왼쪽은 중요한 부분이 모든 필드는 1 일 또는 1 사이비에 t3.aggregated_field으로 표시 I 집계 할 n으로 1 인 하나 개의 필드를 제외하고 0 관계를 가지고있다, 조인 위의 질의.
나는 집계 함수를 사용하고 있습니다 때, SELECT 및 ORDER BY에있는 모든 필드 중 하나를 집계 또는 그룹의 일부 BY 절해야합니다. 이것은 더 자세한 이미보다 내 쿼리 방법이 있습니다.
즉, foo1은 가정하면 기본 키,이 필드는 반복 될 경우, aggregated_field 제외한 모든 사람들도 동일이다. 나는 집계 필드 값을 하나의 행 결과 이러한 반복 행을 원한다. (기본적으로 응집 열과 구별 선택)
합니다 (GROUP BY의 다른 모든 필드를 넣지 않아도)이 할 수있는 더 좋은 방법이 있나요 또는해야 난 단지 반복 처리하십시오 1 N 관계를 가져 오는 각 행에 대해 쿼리를 실행 내 백엔드에서 결과 집합을 통해?
서버는 더 구체적으로, PostgreSQL의 9.1.9 실행 :
해결법
-
==============================
1.이것은 나중에 PostgreSQL을 9.1로 훨씬 간단 할 수있다. As이 밀접하게 관련 질문에 대해 설명 :
이것은 나중에 PostgreSQL을 9.1로 훨씬 간단 할 수있다. As이 밀접하게 관련 질문에 대해 설명 :
그것은 테이블의 기본 키에 의해 GROUP에 충분하다. 이후:
... 당신은 당신의 예제를 단순화 할 수 있습니다 :
SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ') FROM tbl1 GROUP BY 1 ORDER BY foo7, foo8; -- have to be spelled out, since not in select list!
그러나 이후이 :
..보다 빠르고 간단 집계 처음에해야, 나중에 가입 :
SELECT t1.foo1, t1.foo2, ... , t2.bar1, t2.bar2, ... , a.aggregated_col FROM tbl1 t1 LEFT JOIN tbl2 t2 ON ... ... LEFT JOIN ( SELECT some_id, string_agg(agg_col, ', ') AS aggregated_col FROM agg_tbl a ON ... GROUP BY some_id ) a ON a.some_id = ?.some_id ORDER BY ...
쿼리의 큰 부분이 전혀 집계를 필요로하지 않는다 이런 식으로.
나는 최근에이 관련 대답 점을 증명하기 위해 SQL 바이올린의 테스트 케이스를 제공 :
이 관련 답변을 참조하기 때문에 : 아니오, DISTINCT,이 경우에는 전혀 도움이 될 수 없습니다.
-
==============================
2.주요 문제는 필드 (foox는) 다음 계산되는 경우이 도움이 될 수 있습니다 :
주요 문제는 필드 (foox는) 다음 계산되는 경우이 도움이 될 수 있습니다 :
SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ') FROM tbl1 GROUP BY 1, 2, 3, 4, 5, 6 ORDER BY 5, 6
1, 2 ... 그들이 선택 목록에 나타나는 순서대로 필드입니다.
from https://stackoverflow.com/questions/16018237/aggregate-a-single-column-in-query-with-many-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 나는 "존재하지 않는 관계 [TABLE]"오류가 계속 (0) | 2020.05.06 |
---|---|
[SQL] PHP는 쇼핑 카트를 만드는 동안 오류 : "경고로 MYSQL_ASSOC ()는 자원, 부울 주어진 일 1 매개 변수를 기대한다"[중복] (0) | 2020.05.06 |
[SQL] 자 NHibernate은 - 많은 쿼리에 많은 정션 / 목공 테이블을 사용하여 (0) | 2020.05.06 |
[SQL] 이동 평균 MySQL을 계산? (0) | 2020.05.06 |
[SQL] 자바 - 연결 닫은 후 결과 집합 사용할 수 없습니다 (0) | 2020.05.06 |