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

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

维特丝(vetes)泡沫发蜡喷雾干胶定型弹力素羊毛卷男女保湿蓬松发胶 泡沫发蜡450ml+旅行装99ml
¥34.00
维特丝(vetes)一梳黑染发剂染发梳植物潮色显白遮盖白发自然清水纯黑发焗油男女梳炫彩 自然黑LW00
¥49.00
维特丝(vetes)染发笔遮白补染快速染发天然植物一次性染发棒 一次性染发棒黑色
¥46.00
维特丝 护发精油防毛躁清香玫瑰奇焕亮发干枯烫发卷发直发头发润发护发素男女士 滋养柔顺护发精油100ml
¥36.00