zoukankan      html  css  js  c++  java
  • 数据库中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');

  • 相关阅读:
    记录犯得最可笑的错误
    爬虫阶段内容总结
    docker_nginx_Elasticsearch
    git基础
    爬虫pearPro
    爬虫wangyiPro
    sunPro
    docker-compose终极搞定个人博客
    小程序下拉三个小点不显示问题
    vue鼠标拖动
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/6593995.html
Copyright © 2011-2022 走看看