数据库表:
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值