博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL进阶:HAVING子句
阅读量:2346 次
发布时间:2019-05-10

本文共 1275 字,大约阅读时间需要 4 分钟。

1、查询缺失的编号 

-- 查询是否存在缺失的编号select '存在缺失编号' from bs_visit HAVING count(*) <> MAX(id);-- 查询最小的缺失编号SELECT	min(id + 1)FROM	bs_visitWHERE	id + 1 NOT IN (SELECT id FROM bs_visit)

2、查询众数(数量最多的值):

SELECT	dm_desc2,	count(*)FROM	bs_visitGROUP BY	dm_desc2HAVING	count(*) >= (		SELECT			MAX(c)		FROM			(				SELECT					count(*) AS c				FROM					bs_visit				GROUP BY					dm_desc2			) tmp	)-- 每个派生表都必须有自己的别名(此处用了tmp)

3、求中位数

-- 思路:自连接,以A表进行分组,1、过滤出A表值比B表一半的数量的值都大的A表值。-- 2、过滤出A表值比B表一半的数量的值都小的A表值。-- 3、取交集AND, 然后进行求平均值SELECT	AVG(DISTINCT id)FROM	(		SELECT			A.id		FROM			bs_visit A,			bs_visit B		GROUP BY			A.id		HAVING			SUM(				CASE				WHEN A.id >= B.id THEN					1				ELSE					0				END			) >= COUNT(*)/2		AND SUM(			CASE			WHEN A.id <= B.id THEN				1			ELSE				0			END		) >= COUNT(*)/2	) tmp-- 举例: 求 1 2 3 4 的中位数,  答案应该是5 。-- 自连接 A 表 1234 B表 1234-- 1、过滤出A表值比B表一半的数量的值都大的A表值。   2 3 4 (含等号,故有2)-- 2、过滤出A表值比B表一半的数量的值都小的A表值。   1 2 3 (含等号,故有3)-- 3、取交集AND, 然后进行求平均值   (2 2 3 3 )这是交集,  平均值是5 ,故中位数为5

4、查询不包含NULL的集合

SELECT	dm_desc2FROM	bs_visitGROUP BY	dm_desc2HAVING	count(*) = count(`status`);-- 等效SELECT	dm_desc2FROM	bs_visitGROUP BY	dm_desc2HAVING	count(*) = SUM(		CASE		WHEN `status` IS NOT NULL THEN			1		ELSE			0		END	)-- count(*) 用于统计行数-- count(column) 会排除NULL的列,仅统计非NULL的数量。-- count(主键) 效率最高

 

转载地址:http://vfsvb.baihongyu.com/

你可能感兴趣的文章
将代码托管到Coding
查看>>
JS-异步提交表单的几种方式
查看>>
作为一个Java初学者应该注意些什么呢?
查看>>
27岁转行自学Java,真的太晚了吗?
查看>>
自学Java最起码要学到什么程度才能就业?
查看>>
零基础学Java需要做哪些准备?需要注意些什么呢?
查看>>
有了这份阿里大牛手写630页Java高级面试手册,offer稳了【建议收藏】
查看>>
学习Java,需要学到什么程度,才能出去找工作?
查看>>
2021年Java发展怎么样?现在学了Java技术出来是否还能找到工作?
查看>>
Java程序员面试大厂的技术标准,你达到要求了吗?
查看>>
为什么Java程序员需求量这么大,还会有人找不到合适的工作?
查看>>
过来人对程序员学习Java的10条建议,第2点很重要!
查看>>
大学生如何学好Java?过来人给你7点建议
查看>>
过来人的经验:Java实习生在公司里一般都做什么?
查看>>
Java入门基础知识点整理大放送,推荐收藏
查看>>
如何成为月入25k的高级程序员?建议养成这7个习惯
查看>>
学 Java还是Python, 哪个更好找工作?
查看>>
Java基础知识:如何计算Java对象占用内存大小?
查看>>
一份Java程序员的珍藏书单,请您注意查收
查看>>
为什么这么多人Java基础薄弱?该如何提升?
查看>>