count函数_谈谈数据库(ORACLE,Mysql,SQL Server)中聚合函数COUNT的另类作用

谈谈数据库(ORACLE,Mysql,SQL Server)中聚合函数COUNT的另类作用

37487b70b110ca2f8b907cc95cf2db98.png

统计的福音

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;

上面的语句三种数据库通用,首先看结果:

6c824978cf8f5caeaa8aa2a84b158a4d.png

统计结果

外层是针对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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值