• 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值相同的记录,分成一组,

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

  • 相关阅读:
    转“C++之文件IO操作流”
    编译过程的一些小知识——#pragma once与 #ifndef的区别以及介绍
    编译过程的一些小知识——内部连接与外部连接
    VC MFC如何使用Console输出调试信息..
    windows 下ping命令,t选项
    电力间隔定义
    这样的要求不过分
    拾零之 :if 判断顺序的问题
    CMarkup 解析XML
    XinZhou housing mobile phone
  • 原文地址:https://www.cnblogs.com/qylbg/p/3182792.html
Copyright © 2020-2023  润新知