문제
MySQL을 시뮬레이션 할 Informix의 SQL에서 쿼리를 찾고 group_concat
기능.
MySQL이란 무엇입니까? group_concat
이는 그룹의 모든 구성원을 열거하는 것입니다.
따라서 다음과 같이 데이터를 사용하면 다음과 같습니다.
orderid:itemName:price
1:Paper :10
1:Pen :5
2:Sugar :15
다음 쿼리 :
select group_concat(itemName), sum(price)
from order_details
group by orderid
생산 :
items :price
Paper,Pen:15
Sugar :15
Informix에서 이것을 달성하는 가장 효율적인 방법은 무엇입니까? 저장된 절차를 사용해야합니까?
해결책
이를 위해 사용자 정의 집계를 정의해야합니다. 네 부분이 있습니다 - 네 가지 기능 (검색 집계를 만듭니다 에서 IDS 12.10 정보 센터):
- 이니셜 라이저 (init)
- 반복자 (iter)
- 결합 (결합)
- 파이널 라이저 (최종)
그것은 자본의 공식 용어이며, 그것은 적당히 직관적입니다. 평균 계산을 생각하십시오.
- 이니셜 라이저 : set sum = 0; n = 0
- 반복자 : set sum += x; n ++
- 결합기 : set sum = sum1 + sum2; n = n1 + n2를 설정하십시오
- Finalizer : result = sum / n- n = 0 (제로 디바이드) 점검
결합기는 병렬 실행의 중간 결과를 결합하는 데 사용됩니다. 각 병렬 실행은 반복자로 시작하여 중간 결과를 생성합니다. 병렬 실행이 완료되면 별도의 값 세트가 결합기와 결합됩니다.
저장된 절차 또는 C 또는 Java UDR을 사용하여 IDS에서 유사한 코드를 작성할 수 있습니다.
SO 질문을 참조하십시오 하나에서 많은 관계를 2 개의 열로 표시 - 1 개의 고유 행 (ID & Comma 분리 목록) 문자열 기반 Group_Concat () 함수의 경우 Informix에서 구현되었습니다.
다른 팁
이를 위해 Informix에는 내장 기능이 없습니다. 다른 주류 RDBM이 기괴한 집계 기능을 가지고 있습니까? 쿼리에서 선택되지 않은 열로 주문하는 것은 약간 모호하지만 그룹화? 그것은 내 새로운 것입니다.
그러한 데이터 세트를 생성하려면 저장된 절차 또는 UDR을 작성해야합니다. 솔직히 말해서, 나는 이것을 데이터베이스에서 시도하지 않을 것입니다. 이 출력의 소비자에게 가장 적합한 작업처럼 보입니다 (즉, 응용 프로그램/웹 앱/보고서 작성기 등).