我们之所以使用having语句,是因为在where条件中无法使用统计函数。

为了讲解having的用法,首先创建下面两张表,sql如下:

user 表

CREATE TABLE `user` (`userId` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(64) NOT NULL COMMENT '登录用户帐号,唯一约束',`password` varchar(64) DEFAULT NULL,`tel` varchar(32) DEFAULT NULL,`email` varchar(100) DEFAULT NULL,`status` tinyint(4) DEFAULT NULL COMMENT '用户状态:0=禁用,1=激活',`createByUserId` int(11) DEFAULT NULL,`lastLoginTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`createTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`updateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`operateName` varchar(64) DEFAULT NULL,`employCard` varchar(32) DEFAULT NULL COMMENT '工牌号',`nickName` varchar(32) DEFAULT NULL COMMENT '昵称-第三方登录显示',`mark` tinyint(4) DEFAULT '0' COMMENT '用户类型0:普通1:QQ联合11:随心购手机12:随心购QQ以及openid',PRIMARY KEY (`userId`),UNIQUE KEY `username_unique` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1214 DEFAULT CHARSET=utf8 COMMENT='用户表 包括:会员,卖家,管理员基本信息'

sale_order 表

CREATE TABLE `sales_order` (`dealId` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`userId` int(11) NOT NULL COMMENT '用户外键ID',`dealCode` varchar(20) DEFAULT NULL COMMENT '交易编号',`dealAmount` decimal(10,2) DEFAULT NULL COMMENT '实际支付金额',`originalAmount` decimal(10,2) DEFAULT NULL COMMENT '订单没有使用优惠券的总价',`orderAmount` tinyint(4) DEFAULT '0' COMMENT '交易包含订单数量',`couponAmount` decimal(10,2) DEFAULT NULL COMMENT '优惠使用券金额',`postageAmount` decimal(10,2) DEFAULT NULL COMMENT '邮费金额',`updateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',`createTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',`description` varchar(50) DEFAULT NULL COMMENT '交易描述',`cpsServerId` int(11) DEFAULT NULL,`cpsProps` varchar(250) DEFAULT NULL,`orderOrigin` int(11) DEFAULT NULL,`cpsRate` decimal(10,2) DEFAULT NULL,`semSourceId` int(11) DEFAULT NULL COMMENT 'sem来源',`regionId` int(11) DEFAULT NULL COMMENT '收货地址regionId',`payStatus` int(4) DEFAULT NULL COMMENT '付款状态:1 未付款  2 已付款',`STATUS` tinyint(4) NOT NULL DEFAULT '1' COMMENT '订单状态:1 - 未完成;2-已完成;3-已取消',`isDelete` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否删除:1=否 0=是',`gateWayId` int(11) DEFAULT NULL COMMENT '网关ID',`gateWayType` int(11) DEFAULT NULL COMMENT '网关类型:0=支付宝,1=银联,2=银行直连',`outTradeNo` varchar(64) DEFAULT NULL COMMENT '付款单号->银行付款的单号',`fullReductionAmount` decimal(10,2) DEFAULT '0.00' COMMENT '满减金额',`ubScheduleId` int(11) DEFAULT NULL COMMENT '购买计划ID',`ubScheduleItemId` int(11) DEFAULT NULL COMMENT '购买计划明细Id',`bankDiscountAmount` decimal(10,2) DEFAULT '0.00' COMMENT '银行打折优惠的金额',`buyReductionAmount` decimal(10,2) DEFAULT '0.00' COMMENT '买减金额',`redAmount` decimal(10,2) DEFAULT '0.00' COMMENT '红包金额(随心购)',`denomination` decimal(10,2) DEFAULT '0.00' COMMENT '活动优惠金额',`orderType` tinyint(4) DEFAULT NULL COMMENT '订单类型:8:零元试吃',`isOverseas` tinyint(4) DEFAULT '0' COMMENT '海外商品直购 0:否1:是',PRIMARY KEY (`dealId`),KEY `dealCode` (`dealCode`),KEY `cpsServerId` (`cpsServerId`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4092 DEFAULT CHARSET=utf8 COMMENT='订单交易表'

我们希望查找订单总金额大于10000 的客户。sql如下:

SELECT  u.username,SUM(so.dealAmount) FROM sales_order so INNER JOIN USER u ON u.userid=so.userid GROUP BY so.userid HAVING SUM(so.dealAmount)>10000

结果如下(限于篇幅,这里没有提供出两张表中的数据):

然后我们再做一个练习:

在活动前有两次以上交易经历的所有会员ID(两次以上交易:在不同一日,两次下单并付款),活动前(定义为2014年4月1日至2015年1月13日)。

sql语句如下:

SELECT so.userid,u.username,COUNT(so.dealid) FROM sales_order so
INNER JOIN `user` u ON so.userId = u.userid
WHERE so.createTime BETWEEN '2014-04-01' AND '2015-1-13' AND so. paystatus = 2 GROUP BY so.userId HAVING COUNT(so.dealid) > 1  AND  COUNT(DISTINCT TO_DAYS(so.createTime)) > 1

结果如下:

Sql Having 用法示例相关推荐

  1. sql语句中的in用法示例_PHP中的循环语句和示例

    sql语句中的in用法示例 循环 (Loops) Imagine that we need a program that says "hello world" 100 times. ...

  2. sql语句中的in用法示例_示例中JavaScript in操作符

    sql语句中的in用法示例 One of the first topics you'll come across when learning JavaScript (or any other prog ...

  3. sql子查询示例_SQL更新查询示例说明

    sql子查询示例 In this article, we're going to learn how to use the SQL update statement - what it is, wha ...

  4. mysql count if语句_COUNT分组条件去重的sql统计语句示例(mysql)

    常规情况下的sql分组统计为: select count(1) from 表 where 条件 group by 字段; 但是有时往往需要添加不同的条件已经去重的统计以上语句就不能满足需求. 解决方案 ...

  5. mysql教程or怎么用_MySQL中or语句用法示例

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...

  6. mysql or_MySQL中or语句用法示例

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...

  7. to_sql用法示例_SQL Union概述,用法和示例

    to_sql用法示例 This article will provide a deep dive into the SQL Union operator, describing its many us ...

  8. sql 自定义函数 示例_SQL滞后函数概述和示例

    sql 自定义函数 示例 In the article SQL Server Lead function overview and examples, we explored Lead functio ...

  9. mysql数据库 or的用法_MySQL中or语句用法示例

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...

最新文章

  1. 第三天:Vue的组件化
  2. 服务器硬件电路设计书籍,家庭网关硬件接口电路设计大全——电路精选(3)...
  3. python有道翻译接口翻译页面-tornado框架学习及借用有道翻译api做自动翻译页面...
  4. mybatis传递多个参数_Mybatis传递多个参数的4种方式(干货)
  5. 今日arXiv精选 | 11篇ICCV 2021最新论文
  6. 使用var,Lombok和Fluxtion轻松处理事件
  7. dockerfile mysql例子_docker-compose 实用示例
  8. 动态改变ListView布局
  9. Linux:建立内核代码树
  10. OpenCV中Canny边缘检测
  11. 几点减几点怎么列算式_节日礼品怎么挑选 这几点很关键
  12. java 新增的方法外部调用提示不存在_Java面试简答题(一)
  13. Project2007工具栏没有Pert分析按钮
  14. 【加拿大留学】蒙特利尔中国公派学者 学生学习生活指南【蒙特利尔留学必看,第一次出国必看】
  15. Ubuntu18.04为EW-7822ULC网卡安装驱动
  16. python程序基础网课答案_Python程序设计基础智慧树网课答案
  17. MAC装win10 清理临时文件
  18. jsp中c标签的详细使用
  19. 主动降噪耳机榜单,降噪耳机南卡和万魔哪个降噪好?
  20. vue配置favicon.ico图标

热门文章

  1. POJ - 1847 Tram
  2. 在window的cmd命令行中通过chcp修改代码页--正确显示utf-8字符
  3. 练习-Java循环综合练习二之哥德巴赫猜想
  4. 自制炒股盯盘神器——python实现GUI版本
  5. C语言文件的读取及写入
  6. 一入 ‘ 函数 ’ 深似海
  7. 深入理解Kotlin无参构造函数
  8. 《CTO》第二期7月上市:不标准,毋宁死
  9. ng-appdata-ng-app
  10. Java中的SSM框架指的什么?有哪些优点?