SQL 分组统计去重有条件的过滤

本文通过示例介绍了SQL中的分组统计方法,包括GROUP BY、COUNT、DISTINCT以及CASE WHEN条件过滤,展示了如何根据年龄统计用户数量,同时应用不同过滤条件进行数据去重和筛选。例如,统计不同年龄段用户数量、按年龄分组并去除创建时间重复项,以及结合创建时间和在线状态的条件查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

见字如面,如标题拆分:

  • 分组   GROUP BY field_name
  • 统计   COUNT(field_name)
  • 去重  DISTINCT  field_name
  • 条件过滤     CASE WHEN   age > 18 THEN  age  END

示例:

前序:

        表结构

CREATE TABLE `data_table_name` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(50) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '用户姓名',
  `age` tinyint(3) NOT NULL DEFAULT '0' COMMENT '年龄',
  `is_online` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否在线 1:在线 2:离线 ',
  `create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='测试数据表';

 表数据:

 

 

二、 需求

        1、统计所有用户不同年龄段的数量,以年龄为维度分组

select count(age) from data_table_name group by age;

        结果1: 

 

 

 

         2、统计所有用户不同年龄段的数量,以年龄为维度分组且以创建时间去重

select *, count(DISTINCT create_time) from data_table_name group by age;

结果2:

 

3、统计所有用户不同年龄段的数量,以年龄为维度分组且以创建时间去重,并且创建时间大于 > 1653903132

select *,
count(DISTINCT case when create_time > 1653903132 then create_time end) as num from data_table_name group by age;

        结果3:                 

 

4、 统计所有用户不同年龄段的数量,以年龄为维度分组且以创建时间去重,并且创建时间大于 > 1653903132 and is_online = 1

select *, count(DISTINCT case when create_time > 1653903132 and is_online = 1 then create_time end) as num from data_table_name group by age;

         结果4:     

 

 

以上,需求千息万变,万变不离其宗。

 

 我为人人,人人为我,美美与共,天下大同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值