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

珍致(FancyFeast)猫罐头 普瑞纳泰国进口猫湿粮 宠物成幼猫金枪鱼肉猫零食 整箱(85g*24罐) >> 限时秒杀¥208.00

准备一个表及数据:

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
富朵新款睡衣女春秋双层纯棉纱布韩版可爱碎花长袖长裤甜美全棉家居服 粉色 小雏菊 L码 >> 限时秒杀¥159.00

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