SUM сгруппированное поле - PullRequest
0 голосов
/ 07 июля 2011

Мне нужно СУММИТЬ содержимое столбца, который уже разработан с использованием GROUP BYs. Как именно вы это сделаете?

Группа должна основываться на имени пользователя, а не на всем содержимом набора результатов. Я считаю, что это, по сути, группа в этом поле имени пользователя, но я считаю, что это нарушит работу запроса в настоящее время.

Пример ниже:

   SELECT A1.USERNAME, DATE_FORMAT(FROM_UNIXTIME(A1.TIME_STAMP),'%Y-%m-%d') AS DTTM, A1.ACCTSESSIONID,
          MAX(IFNULL(A1.ACCTINPUTGW,0)  * POW(2,32) + IFNULL(A1.ACCTINPUTOCT, 0)) - MAX(IFNULL(A2.ACCTINPUTGW,0)  * POW(2,32) + IFNULL(A2.ACCTINPUTOCT, 0)) as TOTAL_UPLOAD,
          MAX(IFNULL(A1.ACCTOUTPUTGW,0) * POW(2,32) + IFNULL(A1.ACCTOUTPUTOCT, 0)) - MAX(IFNULL(A2.ACCTOUTPUTGW,0) * POW(2,32) + IFNULL(A2.ACCTOUTPUTOCT, 0)) as TOTAL_DOWNLOAD

     FROM ACCOUNTING A1   

LEFT JOIN ACCOUNTING A2
       ON A1.ACCTSESSIONID = A2.ACCTSESSIONID
      AND DATE_FORMAT(FROM_UNIXTIME(A2.TIME_STAMP), '%Y-%m-%d') = '2011-07-04'   

    WHERE DATE_FORMAT(FROM_UNIXTIME(A1.TIME_STAMP), '%Y-%m-%d') = '2011-07-05'   
 GROUP BY A1.ACCTSESSIONID,A2.ACCTSESSIONID
 ORDER BY A1.USERNAME

Edit:

Столбцы будут: TOTAL_DOWNLOAD и TOTAL_UPLOAD

1 Ответ

1 голос
/ 07 июля 2011

Спасибо @ ypercube, работал угощение

SELECT A3.USERNAME
     , SUM(A3.TOTAL_UPLOAD) AS FINAL_UPLOAD
     , SUM(A3.TOTAL_DOWNLOAD) AS FINAL_DOWNLOAD
FROM 
  ( SELECT
        A1.USERNAME
      , DATE_FORMAT(FROM_UNIXTIME(A1.TIME_STAMP),'%Y-%m-%d') AS DTTM
      , A1.ACCTSESSIONID
      , MAX(IFNULL(A1.ACCTINPUTGW,0) * POW(2,32) + IFNULL(A1.ACCTINPUTOCT, 0))
        - MAX(IFNULL(A2.ACCTINPUTGW,0) * POW(2,32) + IFNULL(A2.ACCTINPUTOCT, 0))
        AS TOTAL_UPLOAD
      , MAX(IFNULL(A1.ACCTOUTPUTGW,0) * POW(2,32) + IFNULL(A1.ACCTOUTPUTOCT, 0))
        - MAX(IFNULL(A2.ACCTOUTPUTGW,0) * POW(2,32) + IFNULL(A2.ACCTOUTPUTOCT, 0))
        AS TOTAL_DOWNLOAD             
    FROM ACCOUNTING A1   
      LEFT JOIN ACCOUNTING A2
        ON A1.ACCTSESSIONID = A2.ACCTSESSIONID
        AND DATE_FORMAT(FROM_UNIXTIME(A2.TIME_STAMP), '%Y-%m-%d') = '2011-07-04'   
    WHERE DATE_FORMAT(FROM_UNIXTIME(A1.TIME_STAMP), '%Y-%m-%d') = '2011-07-05'   
    GROUP BY A1.ACCTSESSIONID,A2.ACCTSESSIONID
    ORDER BY A1.USERNAME
  ) AS A3    
GROUP BY A3.USERNAME
...