Sql Having 用法示例
我们之所以使用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 用法示例相关推荐
- sql语句中的in用法示例_PHP中的循环语句和示例
sql语句中的in用法示例 循环 (Loops) Imagine that we need a program that says "hello world" 100 times. ...
- sql语句中的in用法示例_示例中JavaScript in操作符
sql语句中的in用法示例 One of the first topics you'll come across when learning JavaScript (or any other prog ...
- sql子查询示例_SQL更新查询示例说明
sql子查询示例 In this article, we're going to learn how to use the SQL update statement - what it is, wha ...
- mysql count if语句_COUNT分组条件去重的sql统计语句示例(mysql)
常规情况下的sql分组统计为: select count(1) from 表 where 条件 group by 字段; 但是有时往往需要添加不同的条件已经去重的统计以上语句就不能满足需求. 解决方案 ...
- mysql教程or怎么用_MySQL中or语句用法示例
1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...
- mysql or_MySQL中or语句用法示例
1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...
- to_sql用法示例_SQL Union概述,用法和示例
to_sql用法示例 This article will provide a deep dive into the SQL Union operator, describing its many us ...
- sql 自定义函数 示例_SQL滞后函数概述和示例
sql 自定义函数 示例 In the article SQL Server Lead function overview and examples, we explored Lead functio ...
- mysql数据库 or的用法_MySQL中or语句用法示例
1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...
最新文章
- 第三天:Vue的组件化
- 服务器硬件电路设计书籍,家庭网关硬件接口电路设计大全——电路精选(3)...
- python有道翻译接口翻译页面-tornado框架学习及借用有道翻译api做自动翻译页面...
- mybatis传递多个参数_Mybatis传递多个参数的4种方式(干货)
- 今日arXiv精选 | 11篇ICCV 2021最新论文
- 使用var,Lombok和Fluxtion轻松处理事件
- dockerfile mysql例子_docker-compose 实用示例
- 动态改变ListView布局
- Linux:建立内核代码树
- OpenCV中Canny边缘检测
- 几点减几点怎么列算式_节日礼品怎么挑选 这几点很关键
- java 新增的方法外部调用提示不存在_Java面试简答题(一)
- Project2007工具栏没有Pert分析按钮
- 【加拿大留学】蒙特利尔中国公派学者 学生学习生活指南【蒙特利尔留学必看,第一次出国必看】
- Ubuntu18.04为EW-7822ULC网卡安装驱动
- python程序基础网课答案_Python程序设计基础智慧树网课答案
- MAC装win10 清理临时文件
- jsp中c标签的详细使用
- 主动降噪耳机榜单,降噪耳机南卡和万魔哪个降噪好?
- vue配置favicon.ico图标