数据库中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

生成的表格:

  1. sell_no             name         phone               amount      date  
  2. 00000000001         李晓红       15822533496         50          2011-10-23 08:09:23  
  3. 00000000002         李晓红       15822533496         60          2011-10-24 08:15:34  
  4. 00000000003         李晓红       15822533496         30          2011-10-24 12:20:56  
  5. 00000000004         杨 轩        18200000000         100         2011-10-24 07:59:43  
  6. 00000000005         杨 轩        18200000000         200         2011-10-24 10:11:11  
  7. 00000000006         柳梦璃       18211111111         50          2011-10-24 09:09:46  
  8. 00000000007         韩菱纱       18222222222         50          2011-10-24 08:09:45  
  9. 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');

 

转载于:https://www.cnblogs.com/zhouzetian/p/6593995.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值