在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

数据库中group by和having语法使用是什么样的

106次阅读
没有评论

共计 3340 个字符,预计需要花费 9 分钟才能阅读完成。

本篇文章给大家分享的是有关数据库中 group by 和 having 语法使用是什么样的,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。

有个朋友问我一个返话费的问题,大概意思是这样的:只需把表 deal 中所有手机用户某天充值两次以上且总金额超过 50 的用户充值记录查询出来,至于怎么进行返话费那不是重点。

先看看 group by 的语法:

SELECT column1, SUM(column2) FROM list-of-tables GROUP BY column-list  

GROUP BY 子句将集中所有的行在一起,它包含了指定列的数据以及允许合计函数来计算一个或者多个列。

假设我们将从员工表 employee 表中搜索每个部门中工资最高的薪水,可以使用以下的 SQL 语句:

SELECT max(salary), dept FROM employee GROUP BY dept; 

这条语句将在每一个单独的部门中选择工资最高的工资,结果将他们的 salary 和 dept 返回。

  group by 顾名思义就是按照 xxx 进行分组,它必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标识字段。

  聚合函数有:sum()、count()、avg()等,使用 group by 目的就是要将数据分组进行汇总操作。

  例如对员工表的操作:

select dept_id,count(emp_id),sum(salary) form employee  group by dept_id; 

  这样的运行结果就是以“dept_id”为分类标志统计各单位的职工人数和工资总额。

再看看 having 的语法:

SELECT column1, SUM(column2) FROM“list-of-tables”GROUP BY“column-list”HAVING“condition”; 

这个 HAVING 子句的作用就是为每一个组指定条件,像 where 指定条件一样,也就是说,可以根据你指定的条件来选择行。如果你要使用 HAVING 子句的话,它必须处在 GROUP BY 子句之后。

  例如还是对员工表的操作:

SELECT dept_id, avg(sal) FROM employee GROUP BY dept_id HAVING avg(salary) = 4000; 

  这样的运行结果就是以“dept_id”为分类标志统计各单位的职工人数和工资平均数且工资平均数大于 4000。

下面开始我们的返话费查询功能的实现:

话费表 deal 字段有这些:

sell_no: 订单编号

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 的数据取出来,要取的结果如下:

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 

因为今天 (2011-10-24) 李晓红和杨轩交过两次以上话费,而且总金额大于 50,所以有他们的数据,而柳梦璃,韩菱纱,云天河只交过一次,所以没他们的数据。

我的处理思路大概是这样的,先把当天日期的记录用 group by 进行手机号分组即一个手机号为一组,接着用 having 子句进行过滤,把交过两次话费且话费总金额大于 50 的手机号查出来,最后用手机号和日期条件组合查询就能完成数据的查询,具体如下。

  注意日期处理细节,要查询的某一天 (yyyy-MM-dd) 的所有记录是这样处理的:

SELECT date_format(date, %Y-%m-%d) from deal; 

  查询出符合条件(交过两次以上话费,而且总金额大于 50)的手机号:

select phone from deal where date_format(date, %Y-%m-%d)= 2011-10-24 group by phone having count(phone) 1 and sum(amount)  

  结合手机号和日期查询出最终记录:

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-%d)= 2011-10-24  

  group by phone having count(phone) 1 and sum(amount) 50) order by phone; 

  里边嵌套了一个 select 语句,感觉效率低点了,谁有更高效的方法不?

附数据建库 sql 代码:

create database if not exists `phone_deal`; 

USE `phone_deal`; 

DROP TABLE IF EXISTS `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=utf8; 

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    

以上就是数据库中 group by 和 having 语法使用是什么样的,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-18发表,共计3340字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 日韩精品无码一本二本三本 | 日本理论视频 | 成人国产欧美大片一区 | 国产精品夜夜春夜夜爽久久小 | 久久精品国产亚洲av品善 | 久久午夜伦鲁片免费无码 | 成人性做爰aaa片免费看 | 97久久综合精品久久久综合 | 久久久久久久久免费视频 | 成人嗯啊视频在线观看 | 国产福利永久在线视频无毒不卡 | 亚洲天堂小视频 | 忘穿内裤坐公交被挺进小说 | 国产成人无码区免费内射一片色欲 | 飘花国产午夜精品不卡 | 视频一区久久 | 成人精品美女隐私视频 | 欧美疯狂黑人xxxxbbbb | 在线a亚洲v天堂网2019无码 | 精品视频在线免费 | 国产欧美另类z0z | 91国内视频在线观看 | 欧美激情免费观看 | 久久久亚洲国产精品主播 | 日本三级视频在线播放 | 无码日韩精品一区二区人妻 | 亚洲国产成人精品无码区在线播放 | 久久久精品中文字幕麻豆发布 | 爱爱小视频免费看 | 青春草国产成人精品久久 | 亚洲国产成人精品久久 | 国产在线高清一级毛片 | 丰满少妇大力进入 | 亚洲色播爱爱爱爱爱爱爱 | 精品欧美一区视频在线观看 | 午夜电影网va内射 | 99爱视频99爱在线观看免费 | 国产av无码专区亚洲版综合 | 国产欧美日韩一区二区三区视频 | 日本人妻伦在线中文字幕 | 在教室伦流澡到高潮h强圩电影 |