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

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

成人本科学士学位英语统一考试星级词汇大冲关(第2版 乱序版)
¥18.09
良世医 医用一次性隔离衣 连体式连帽衣医用隔离服坐飞机男女通用(建议160CM-185CM)
¥25.20
长城【勇系列】金吉星合成技术机油 SP/GF-6A 5W-30 发动机油850g/1L
¥32.90
若烟雪茄保湿包加湿包片保湿袋69%湿度双向保湿恒湿四季通用 便携8g
¥14.00
墨斗鱼 大自然套装 香薰精油无火香薰精油补充液室内卫生间香薰炉灯卧室香水香氛复方植物精油
¥48.90
邮宁(YOUNING)消防卷盘配套铜枪头 消防水带接头消火栓箱自救式软管铜质开关水枪头
¥17.90
有质 400ml注水冰袋【30只装】加厚母乳保鲜户外食品海鲜冷藏冰包
¥17.90
手护佳 一次性食品级丁腈手套 厨房家用公司复工学生开学劳保防护 盒装100只蓝色 L号
¥47.30