zOs/JCL/ACC01

//A540769W JOB (CP00,KE50),'DB2 REO',                                   00010000
//         MSGCLASS=T,TIME=1440,                                        00020000
//         NOTIFY=&SYSUID,REGION=0M,SCHENV=DB2                          00030003
//*MAIN CLASS=LOG                                                       00040003
//DEL      EXEC PGM=IEFBR14
//SYSREC00 DD  DISP=(MOD,DELETE),DSN=A540769.TMP.DSNTIAU0
//SYSREC01 DD  DISP=(MOD,DELETE),DSN=A540769.TMP.DSNTIAU1
//S1       EXEC PGM=IKJEFT01,DYNAMNBR=200,TIME=99
//SYSTSIN  DD *
    DSN SYSTEM(DP4G)
   RUN PROGRAM(DSNTIAUL) PARMS('SQL')
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTERM  DD SYSOUT=*
//SYSPUNCH DD  SYSOUT=*,RECFM=FB,LRECL=80
//SYSREC00 DD  DISP=(NEW,CATLG),DSN=*.DEL.SYSREC00,
//*            dcb=(lrecl=2048,recfm=fb), kein reclen angeben,
//*                                       dann macht dsntiaul es richtig
//             SPACE=(CYL,(2,1000)),MGMTCLAS=COM#A069
//SYSREC01 DD  DISP=(NEW,CATLG),DSN=*.DEL.SYSREC01,
//             SPACE=(CYL,(2,1000)),MGMTCLAS=COM#A069
//DDCARD   DD  SYSOUT=*,RECFM=FB,LRECL=80
//SYSIN      DD *                -- nur jedes 100te query
 set current path = oa1p;
 with x as
 ( select float(max(1, round(sqlCount/100, 0))) sn, p.*
       from pbxx.TACCT_PROGRAM_20131015 p
       where sqlCount > 0
    /* fetch first 1000000  rows only  */
 )
 , y as
 ( select smallint(floor(log10(max(1e-30,
                   real(BPGETPAGE)/sn)) * 3)) g, x.*
       from x
 )
 select char(
        right('              ' || strip(char(count(*))), 12) || ' '
    || substr(fosFmte7(min(real(BPGETPAGE)/sn)), 1, 7) || ' '
    || substr(fosFmte7(max(real(BPGETPAGE)/sn)), 1, 7) || ' '
    || substr(fosFmte7(avg(real(BPGETPAGE)/sn)), 1, 7) || ' '
    || substr(fosFmte7(avg(real(ELAPSEPKG)/sn)), 1, 7) || ' '
    || substr(fosFmte7(avg(real(CPUTCBPKG)/sn)), 1, 7) || ' sum '
    || substr(fosFmte7(sum(real(occurrences))), 1, 7) || ' '
    || substr(fosFmte7(sum(real(sqlCount))), 1, 7) || ' '
    || substr(fosFmte7(sum(real(sn))), 1, 7) || ' '
    || substr(fosFmte7(sum(real(bpGetPage))), 1, 7) || ' '
    || substr(fosFmte7(sum(real(elapsePkg))), 1, 7) || ' '
    || substr(fosFmte7(sum(real(cpuTcbPkg))), 1, 7) || ' '
    || char(min(dateTime)) || ' '
    || char(max(dateTime)) || ' '
    || min(subsystem) || max(subsystem)
    || min(planName)  || max(planName)
    || min(programName) || max(programName)
      , 255)
     from y
     group by g
     order by g desc
 ;
//SYSI1      DD *                      -- average
 set current path = oa1p;
 with x as
 ( select smallint(floor(log10(max(1e-30,
                   real(BPGETPAGE)/sqlCount)) * 3)) g, p.*
       from pbxx.TACCT_PROGRAM_20131015 p
       where sqlCount > 0
       fetch first 100000 rows only
 )
 select char(
        right('              ' || strip(char(count(*))), 12) || ' '
    || substr(fosFmte7(min(real(BPGETPAGE)/sqlCount)), 1, 7) || ' '
    || substr(fosFmte7(max(real(BPGETPAGE)/sqlCount)), 1, 7) || ' '
    || substr(fosFmte7(avg(real(BPGETPAGE)/sqlCount)), 1, 7) || ' '
    || substr(fosFmte7(avg(real(ELAPSEPKG)/sqlCount)), 1, 7) || ' '
    || substr(fosFmte7(avg(real(CPUTCBPKG)/sqlCount)), 1, 7) || ' sum '
    || substr(fosFmte7(sum(real(occurrences))), 1, 7) || ' '
    || substr(fosFmte7(sum(real(sqlCount))), 1, 7) || ' '
    || substr(fosFmte7(sum(real(bpGetPage))), 1, 7) || ' '
    || substr(fosFmte7(sum(real(elapsePkg))), 1, 7) || ' '
    || substr(fosFmte7(sum(real(cpuTcbPkg))), 1, 7) || ' '
    || char(min(dateTime)) || ' '
    || char(max(dateTime)) || ' '
    || min(subsystem) || max(subsystem)
    || min(planName)  || max(planName)
    || min(programName) || max(programName)
      , 255)
     from x
     group by g
     order by g desc
 ;