数据库中group by和having语法使用方法
1:group by (进行分组)
例:将从员工表employee表中搜索每个部门中工资最高的薪水,可以使用以下的SQL语句
select max(salary),dept from employee group by dept;
2: group by 顾名思义就是按照xxx进行分组,它必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标识字段。
聚合函数有:sum()、count()、avg()等,使用group by目的就是要将数据分组进行汇总操作
例:以“dept_id”为分类标志统计各单位的职工人数和工资总额
select dept_id,count(emp_id),sum(salary) from employee group by dept_id;
3:添加having语句(就像where 指定条件一样,给每个组指定筛选条件,必须在group by 后面)
以“dept_id”为分类标志统计各单位的职工人数和工资平均数且工资平均数大于4000。
select dept_id,avg(sal) from employee group by dept_id having avg(salary)>400;
4:数据中的表格deal;
订单编号:sell_id 用户名:name 用户手机号:phone 充值金额:amount 充值日期:date
生成的表格:
- sell_no name phone amount date
- 00000000001 李晓红 15822533496 50 2011-10-23 08:09:23
- 00000000002 李晓红 15822533496 60 2011-10-24 08:15:34
- 00000000003 李晓红 15822533496 30 2011-10-24 12:20:56
- 00000000004 杨 轩 18200000000 100 2011-10-24 07:59:43
- 00000000005 杨 轩 18200000000 200 2011-10-24 10:11:11
- 00000000006 柳梦璃 18211111111 50 2011-10-24 09:09:46
- 00000000007 韩菱纱 18222222222 50 2011-10-24 08:09:45
- 00000000008 云天河 18333333333 50 2011-10-24 08:09:25
把以上数据当天(2011-10-24)交过两次话费,而且总金额大于50的数据取出来
一:注意日期处理细节,要查询的某一天(yyyy-MM-dd)的所有记录是这样处理的
select date_format(date,'%y-%m-%d') from deal;
二:查询出符合条件(交过两次以上话费,而且总金额大于50)的手机号:
select phone from deal where date_format(date,'&y-%m-%m')=2011-10-24 group by phone having count(phone)>1 andsum( amount)>50;
三:结合进行最终查找:
select * from deal where date_format(date,'%y-%m-%d')=2011-10-24 and phone in(select phone from deal where date_format(date,'&y-%m-%m')=2011-10-24 group by phone having count(phone)>1 andsum( amount)>50);
补充建立数据库的代码:
creat database if not exists 'phone_deal';
use phone_deal;
create table 'deal'( `sell_no` varchar(100) NOT NULL, `name` varchar(100) default NULL, `phone` varchar(100) default NULL, `amount` decimal(10,0) default NULL, `date` datetime default NULL, PRIMARY KEY (`sell_no`));
ENGINE=InnoDB default charset=UTF-8;
insert into `deal`(`sell_no`,`name`,`phone`,`amount`,`date`) values ('00001','李晓红','15822533496','60','2011-10-23 08:09:23'),('00002','李晓红','15822533496','50','2011-10-24 08:15:34'),('00003','李晓红','15822533496','40','2011-10-24 12:20:56'),('00004','杨轩','18210607179','100','2011-10-24 07:59:43'),('00005','杨轩','18210607179','50','2011-10-24 10:11:11'),('00006','柳梦璃','15822533492','1000','2011-10-24 09:09:46'),('00007','韩菱纱','15822533493','10000','2011-10-24 08:09:45'),('00008','云天河','15822533494','500','2011-10-24 08:09:25');