group by 分组函数 的用法

  GROUP BY 是对结果集 进行分组 然后对每一组 ,可以对每一组进行统计 例如对每一组的某个字段进行统计 例如求和sum(column)

举个例子,我查询某个用户的某个时间段 的信息

1.没用到group by 分组的时候, 我查询出多条记录,虽然cons_no 相同,也把表中全部的记录全部显示出来

  SELECT AMT_YM,CALC_ID,SETTLE_APQ,CONS_NO
         FROM PUB_E_PQ_AMT
         WHERE CONS_NO = '1185468207'
               AND (AMT_YM BETWEEN '201301' AND '201307')

   AMT_YM        SETTLE_APQ   CONS_NO
------ ----------------- ----------------
201304                50             1185468207
201304               450            1185468207

2.当用到group by 分组 我按cons_no 进行分组 ,相同的 cons_no 被分成一组,然后对每一组的记录 进行统计,

我想求每组记录的  SETTLE_APQ 的和 ,就可以用 sum(SETTLE_APQ) 求和,然后 每几组,就只显示一条记录

 SELECT AMT_YM,sum(SETTLE_APQ),CONS_NO 

 FROM PUB_E_PQ_AMT

WHERE CONS_NO = '1185468207' 

AND (AMT_YM BETWEEN '201301' AND '201307') 

GROUP BY AMT_YM,cons_no;

显示的结果集

AMT_YM    SUM(SETTLE_APQ)    CONS_NO
--------------------- -------------------------
201304             500               1185468207

有什么不明白直接说,留言评论

----------------------------------------------------------------

SELECT AMT_YM, /*电费年月 */
       PQ,/*应收电量 */
       CAT_KWH_AMT,/*目录电度电费 */
       T_PL_AMT,/*代征电费*/
       PF_ADJ_AMT,/*力率奖惩电费 */
       BA,/*基本电费 */
       T_AMT,/*总电费*/
       CALC_ID,
       (select a.user_name
          from wf_activity_end f, wf_process_end p, wf_assignment_end a
         where p.app_no = TEMP.APP_NO
           and f.process_id = p.process_id
           and f.definition_id = '03005_100'
           and a.activity_id = f.activity_id
           and a.process_id = f.process_id
           and rownum <= 1
        UNION ALL
        select a.user_name
          from wf_activity_end f, wf_process_end p, wf_assignment_end a
         where p.app_no = TEMP.APP_NO
           and f.process_id = p.process_id
           and f.definition_id = '04007_070'
           and a.activity_id = f.activity_id
           and a.process_id = f.process_id
           and rownum <= 1) PUB_USER_NAME, /*发行人*/
       TO_CHAR(SEND_DATE, 'YYYY-MM-DD hh24:mi:ss') SEND_DATE /*发行时间*/
  FROM (SELECT AMT_YM,
               CALC_ID,
               MAX(SEND_DATE) SEND_DATE,
               SUM(SETTLE_APQ) PQ, /*应收电量 */
               SUM(CAT_KWH_AMT + PL_AMT_10) CAT_KWH_AMT,/*目录电度电费 */
               SUM(PL_AMT_01 + PL_AMT_02 + PL_AMT_03 + PL_AMT_04 + PL_AMT_05 +
                   PL_AMT_06 + PL_AMT_07 + PL_AMT_08 + PL_AMT_09 + PL_AMT_11 +
                   PL_AMT_12) T_PL_AMT,/*代征电费*/
               SUM(PF_ADJ_AMT) PF_ADJ_AMT,/*力率奖惩电费 */
               SUM(CAP_BA + DMD_BA) BA,/*基本电费 */
               SUM(T_AMT) T_AMT,/*总电费*/
               MAX(APP_NO) APP_NO
          FROM PUB_E_PQ_AMT
         WHERE CONS_NO = '1117190102'
           AND (AMT_YM BETWEEN '201301' AND '201307')
        /*   AND SEND_DATE IS NOT NULL */
         GROUP BY AMT_YM, CALC_ID) TEMP
 ORDER BY TEMP.AMT_YM DESC, CALC_ID DESC
 
sql解释: 我已知用户编号 和 电费年月 然后查询这个 PUB_E_PQ_AMT 表,然后把这个表中 电费年月和CALC_id值相同的记录,分成一组,

对每一组的某个字段进行求和 等等

原文地址:https://www.cnblogs.com/qylbg/p/3182792.html