MySQL中count带条件统计个数写法

准备一个表及数据:

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

觉得内容还不错?打赏个钢镚鼓励鼓励!!👍