groupby分组函数的⽤法
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')
groupby是什么函数/* 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值相同的记录,分成⼀组,
对每⼀组的某个字段进⾏求和等等
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论