우선 i5/OS V5R4 용 DB2에서 실행 중입니다. ROW_NUMBER(), RANK() 및 공통 테이블식이 있습니다. 나는 이 아니고에는 TOP n PERCENT 또는 LIMIT OFFSET이 있습니다.GROUP BY를 사용하는 DB2 SQL - 중간
내가 작업하고있는 실제 데이터 세트는 설명하기 어렵 기 때문에 열이 (city, temperature, timestamp)
인 날씨 기록 테이블이 있다고 가정 해 보겠습니다. 각 그룹의 평균에 대한 중간 값을 비교하고 싶습니다. (city)
.
이것은 전체 테이블 집계에 대한 중앙값을 얻는 데 가장 깨끗한 방법입니다. 다시 하나의 행을 얻기 위해 잘 작동
WITH base_t AS
(SELECT temp, row_number() over (order by temperature) AS rownum FROM t),
count_t AS
(SELECT COUNT(temperature) + 1 AS base_count FROM base_t),
median_t AS
(SELECT temperature FROM base_t, count_t
WHERE rownum in (FLOOR(base_count/2e0), CEILING(base_count/2e0)))
SELECT DECIMAL(AVG(temperature),10,2) AS median FROM median_t
을하지만, 그룹화에 무너져 버릴 것 : 나는 IBM 레드 북 here에서 적응.
이
SELECT city, AVG(temperature), MEDIAN(temperature) FROM ...
city | mean_temp | median_temp
===================================================
'Minneapolis' | 60 | 64
'Milwaukee' | 65 | 66
'Muskegon' | 70 | 61
나를 바보로 만드는 답이있을 수 있습니다,하지만 난 정신 블록을 보내고있어이 지금의 일을 내 # 1 일이 아니다 : 개념적으로,이 제가 원하는 것입니다. 가능할 수있는 것 같지만 커다란 테이블이기 때문에 매우 복잡한 것을 사용할 수없고 집계되는 열을 사용자 정의 할 수있는 기능이 필요합니다.
나는 이것을 시도 할 것이고, 나는 OLAP을 더 잘 이해할 필요가 있습니다. 감사. – twblamer
나는 이것을 대답으로 정하고있다. DB2 LUW 9.5에서는 카운트 (*)를 사용하지만 불행히도 i는 DB2에서는 작동하지 않습니다. 아무도 아이디어가 없기 때문에이 제한으로 살아야 할 것입니다. 다시 한번 감사드립니다. – twblamer