天天看點

group by與avg(),max(),min(),sum()函數的關系

資料庫表:

create table pay_report(

    rdate varchar(8),     --日期

    region_id varchar(4),    --地市  

    alipay_pay varchar(12), --支付寶支付

    wechat_pay varchar(12), --微信支付

    phonepay varchar(12)    --電話支付

);

資料表的含義:一個江蘇省全省連鎖的商鋪,每一天總公司都會收到各地市中,電話支付,微信支付,支付寶支付的錢

插入資料:

insert into pay_report values('20170901','0531','120000','2232100','2000');

insert into pay_report values('20170901','0532','890000','100200','800');

insert into pay_report values('20170901','0533','230001','210000','0');

insert into pay_report values('20170902','0531','249500','2234400','100');

insert into pay_report values('20170902','0532','289000','1234000','1800');

insert into pay_report values('20170902','0533','180000','1532100','1400');

insert into pay_report values('20170903','0531','168000','2442100','100');

...

1.avg(),max(),min(),sum()函數可以單獨,不與group by一起使用

select sum(alipay_pay),sum(wechat_pay),max(phonepay)from pay_report;

原因是:avg(),max(),min(),sum() 是對某一分組的操作,這些函數不與其他字段一起查詢,他們查詢内容是列這一大分組的操作,查詢的資料隻有一條

2.avg(),max(),min(),sum()函數與某一字段一起不使用group by一起查詢時,就會報錯

select rdate,sum(alipay_pay),sum(wechat_pay),max(phonepay)from pay_report;

原因是:avg(),max(),min(),sum()是對一分組的操作,而rdate字段是對單一一條的操作,是以在一起查詢會報錯,是以必須使用group by

3,avg(),max(),min(),sum()函數與某一字段一起使用group by一起查詢時

select rdate,sum(alipay_pay),sum(wechat_pay),max(phonepay)from pay_report group by rdate;

原因:rdate将資料按rdate分組,avg(),max(),min(),sum()再對這每一個小分組的資料進行操作,

    是以但查詢的字段是什麼,就必須在後面group by這些字段

    eg: select A,B,C from test group by A;錯誤

       select A,B,C from test group by A,B,C;正确

4,查詢的字段不使用函數,但使用group by

1).select rdate from pay_report group by rdate;

其實顯示的是rdate每一個唯一的值,其實與select distinct rdate from pay_report;語句相同

2).select rdate,region_id from pay_report group by rdate,region_id;

其實篩選出來的是在rdate中的每一個不同的region_id值

--------------------- 本文來自 兮川 的CSDN 部落格 ,全文位址請點選:https://blog.csdn.net/zc_ad/article/details/78121397?utm_source=copy