准备一个表及数据:
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '姓名',
`age` int NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) COMMENT = '用户表';
INSERT INTO t_user (id, name, age) VALUES(1, '小王', 18);
INSERT INTO t_user (id, name, age) VALUES(2, '小明', 8);
INSERT INTO t_user (id, name, age) VALUES(3, '小李', 20);
INSERT INTO t_user (id, name, age) VALUES(4, '小赵', 14);
INSERT INTO t_user (id, name, age) VALUES(5, '老钱', 36);
INSERT INTO t_user (id, name, age) VALUES(6, '老周', 40);
INSERT INTO t_user (id, name, age) VALUES(7, '老孙', 30);
示例:统计所有年龄大于等于30岁的个数,结果应该3
方法一:直接通过where条件
select count(*) from t_user where age>=30
方法二:通过count不统计null值来实现
select count(age>=30 or null) from t_user
方法三:与方法二类似,只是使用了if语句
select count(if(age>=30,1,null)) from t_user
总结:建议使用方法二,因为方法一在想同时显示小于30岁人数及大于等于30岁人数时不支持;而方法三使用了if显得比较啰嗦麻烦。
同时显示小于30岁人数及大于等于30岁人数和总人数sql如下:
select
count(*) as '总人数',
count(age<30 or null) as '<30',
count(age >= 30 or null) as '>=30'
from
t_user