谈谈数据库(ORACLE,Mysql,SQL Server)中聚合函数COUNT的另类作用
Count函数是各类数据库中最为常用的一个聚合函数,一般就是总体计数,或者分组计数。那这个count你还有什么别的让我们想不明白的用法吗?我觉得有,为了让你看完这篇文章,我就不先剧透。你看完后,觉得有用就收藏,点赞转发。
第一步是创建数据,我这个系列文章主要特点是涵盖Oracle,Mysql,SQL Server,根据每种数据库的特点,造数据的手段也不相同。一共2个字段,kmdm科目代码从10到19,score成绩从64到97分。
#以下为Mysql语句
#1创建表
drop table if exists scores;
create table scores(
kmdm varchar(5),
score int(0)
);
#2创建存储过程,为什么创建,因为mysql的循环得在过程或者函数里
DROP PROCEDURE IF EXISTS initscore;
create procedure initscore()
BEGIN
declare i int default 1;
while i<1000 do
insert into scores(kmdm,score) values ((i mod 10)+10,(i mod 35)+63);
set i=i+1;
end while;
commit;
END;
#3插入数据
call initscore;
-------------------------------------------------------------------------
--以下为Oracle语句
--1创建表
create table scores(
kmdm char(2),
score number(5));
--2插入数据
DECLARE
i number(4) := 1;
BEGIN
WHILE i<1000 LOOP
insert into scores(kmdm,score) values(mod(i,10)+10,mod(i,35)+63);
i := i+1;
END LOOP;
END;
--------------------------------------------------------------------------
--以下为SS语句
--1创建表
create table scores(
[kmdm] int,
[score] int);
--2插入数据
begin
declare @i int;
set @i = 1;
while @i<1000
begin
insert into scores(kmdm,score) values((@i % 10)+10,(@i % 35)+63);
set @i=@i+1;
end;
end;
创建语句的细节三种数据库是不同的,请关注本人的数据库系列,手把手教你SQL,下面就是本文的主旨了。
select kmdm 科目代码,
count(*) 各个科目总数,
count(case when score <=69 then 1 else null end) 分数69以下,
count(case when score between 70 and 79 then 1 else null end) 分数7079,
count(case when score between 80 and 89 then 1 else null end) 分数8089,
count(case when score >=90 then 1 else null end) 分数90以上
from scores
group by kmdm
order by kmdm;
上面的语句三种数据库通用,首先看结果:
外层是针对kmdm进行分组,count(*)是统计此科目下的总数,这个没什么好说,重点是借用count的计数规则,null是不计数的,所以可以统计出各种条件的计数,如分数区间,符合此区间的返回非null的值即可比如1,不在这个区间的返回null这样count就不计数了。count(case when score <=69 then 1 else null end) 分数69以下就是借用case语句判断小于69分这个区间的人数进行计数,其它分数不计数。
COUNT在线文档参考,好好阅读在线文档是提高的捷径。
Mysql(中间的版本号可自行指定如5.6):https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_count
ORACLE:https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions039.htm#SQLRF00624
SQL Server: https://docs.microsoft.com/zh-cn/sql/t-sql/functions/count-transact-sql?view=sql-server-2017