本文共 1275 字,大约阅读时间需要 4 分钟。
-- 查询是否存在缺失的编号select '存在缺失编号' from bs_visit HAVING count(*) <> MAX(id);-- 查询最小的缺失编号SELECT min(id + 1)FROM bs_visitWHERE id + 1 NOT IN (SELECT id FROM bs_visit)
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)
-- 思路:自连接,以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
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/