MySql按条件统计数量

MySql按条件统计数量

创建学生表

创建表语句:

create table TbStudent
(
	stuid integer not null,
	stuname varchar(20) not null,
	stusex integer default 1,
	stubirth datetime not null,
	stuaddr varchar(255),
	stuphoto longblob
);

添加学生记录:

insert into TbStudent values 
(1005, '丘处机', 1, '1983-5-5', '北京市海淀区宝盛北里西区28号', null),
(1006, '王处一', 3, '1985-6-6', '深圳市宝安区宝安大道5010号', null),
(1007, '刘处玄', 1, '1987-7-7', '郑州市金水区纬五路21号', null),
(1008, '孙不二', 0, '1989-8-8', '武汉市光谷大道61号', null),
(1009, '平一指', 3, '1992-9-9', '西安市雁塔区高新六路52号', null),
(1010, '老不死', 1, '1993-10-10', '广州市天河区元岗路310号', null),
(1011, '王大锤', 0, '1994-11-11', null, null),
(1012, '隔壁老王', 3, '1995-12-12', null, null),
(1013, '郭啸天', 1, '1996-10-25', null, null);

为了业务要求,这里的性别出现3

统计数量

根据要求查询数量:

SELECT 
-- 学生数量,去除重复id学生
count(DISTINCT st.stuid) 学生数量,
-- 取性别等于1
sum(if(st.stusex = 1,1,0)) 性别1,
-- 取性别为0 或 1的总数量
sum(if(st.stusex = 0 or st.stusex = 1,1,0)) 性别01,
-- 性别1 并且 年龄小于1992年的
sum(if(st.stusex = 1 and st.stubirth < '1991-1-1',1,0)) 性别1和小于1992FROM `tbstudent` st;

在这里插入图片描述

PS

这里只是个小例子,你也可以根据要求变换着使用
数据量在万级别以上的话,而且又是多表关联查询,一定要在查询条件的字段加上索引,速度甚至提升10倍以上
你可以想象一下,不管你是分组还是加条件,你的字段统计是从结果中的每一行进行比对,如果符合就加1,否者再匹配下一行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值