ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 热门 - Power BI数据分析与可视化实战 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 百度秒哒 - 无代码应用搭建平台 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3244|回复: 11

求助,如何实现该分组统计筛选!!!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-9-20 21:48 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 losedmouse 于 2017-9-20 22:19 编辑

===========================================
备注:“表1” 字段为:    分类、名称、进价、售价
===========================================

我想要的结果如下:(为了方便表述,分成三部分)

第一部分:
   对"表1" 按"分类"分组统计,即统计全部数据中,每种"分类"总共有多少条记录;
   即:select 分类,COUNT(分类) as 数量 from 表1 group by 分类

第二部分:
   第1步、对"表1" 按"进价"排序,选取排名前100的数据;
   第2步、对"表1" 按"售价"排序,选取排名前100的数据;
   第3步、把前两步选取的数据合并在一起,并且去除合并后重复的数据;
          即:(select top 100 * from 表1 order by 进价 desc) union (select top 100 * from 表1 order by 售价 desc)
   第4步、对合并数据按"分类"进行分组统计,即统计合并数据中,每种"分类"有多少条记录;

第三部分:
   最终要求筛选出: "第二部分"(即:合并数据中)统计的"分类"数量 大于 "第一部分"中相应"分类"总数量20% 的记录;

测试数据.rar

97.79 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2017-9-20 21:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
建议把原始数据样本以表格的形式展示出来,并上传文件供下载。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-20 22:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 losedmouse 于 2017-9-20 22:20 编辑

请大侠指点。。。帮忙。。

测试数据.rar

97.79 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2017-9-21 09:24 | 显示全部楼层
losedmouse 发表于 2017-9-20 22:18
请大侠指点。。。帮忙。。

第3步、把前两步选取的数据合并在一起,并且去除合并后重复的数据;
          即:(select top 100 * from 表1 order by 进价 desc) union (select top 100 * from 表1 order by 售价 desc)

用过这个语句后,因为去重复,所以分类的数量肯定都是1啊,你确定没错?

最终要求筛选出: "第二部分"(即:合并数据中)统计的"分类"数量 大于 "第一部分"中相应"分类"总数量20% 的记录

第二步数量都是1,肯定没有比第一步大的。

TA的精华主题

TA的得分主题

发表于 2017-9-21 10:30 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-21 11:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
魂断蓝桥 发表于 2017-9-21 09:24
第3步、把前两步选取的数据合并在一起,并且去除合并后重复的数据;
          即:(select top 100 * fr ...

该语句我测试过,没有错的,你可以用我的测试数据,试一下就清楚了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-21 11:44 | 显示全部楼层
再解释下=========

第二部分:
   第1步、对"表1" 按"进价"排序,选取排名前100的数据;
   第2步、对"表1" 按"售价"排序,选取排名前100的数据;
   第3步、把前两步选取的数据合并在一起,并且去除合并后重复的数据;
          即:(select top 100 * from 表1 order by 进价 desc) union (select top 100 * from 表1 order by 售价 desc)      
   第4步、对第3步的合并数据,按"分类"分组统计,统计出每种"分类"包括多少条记录数;
         因为不会写,先以“合并数据”代替吧,意思大概类似这样:select 分类,COUNT(分类) as 数量 from 合并数据 group by 分类

TA的精华主题

TA的得分主题

发表于 2017-9-21 12:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
losedmouse 发表于 2017-9-21 11:44
再解释下=========

第二部分:

把数据减少到50条,模拟你下你要的结果。

第一次查询返回  select 分类,COUNT(分类) as 数量 from [表1$b1:b] group by 分类

分类数量
元器件5
全国地产7
其他商业1
其他建材2
区域地产1
医药商业1
家用电器1
建筑施工2
房产服务2
批发业1
文教休闲1
旅游景点1
汽车服务1
汽车配件1
港口2
火力发电2
玻璃1
生物制药2
电气设备1
电脑设备2
石油加工1
纺织1
综合类2
装修装饰1
轻工机械1
运输设备1
通信设备2
酒店餐饮1
铅锌1
银行1
饲料1


第二次查询 select top 10 * from [表1$] order by 进价 desc union (select top 10 * from [表1$] order by 售价 desc)

分类
代码
名称
进价
售价
全国地产
000002
万 科A28.7728.27
生物制药
000004
国农科技24.4824.89
港口
000022
深赤湾A26.4326.78
其他建材
000023
深天地A24.4524.72
汽车服务
000025
特 力A46.2445.48
医药商业
000028
国药一致67.6167.7
饲料
000048
康达尔26.626.92
电气设备
000049
德赛电池52.8654.44
批发业
000062
深圳华强27.2827.02
通信设备
000063
中兴通讯24.5225


第三次对第二次结果,按分类计数  select 分类,count(*) from (select top 10 * from [表1$] order by 进价 desc union (select top 10 * from [表1$] order by 售价 desc)) group by 分类

分类
Expr1001
全国地产
1
其他建材
1
医药商业
1
批发业
1
汽车服务
1
港口
1
生物制药
1
电气设备
1
通信设备
1
饲料
1


最后一步"(即:合并数据中)统计的"分类"数量 大于 "第一部分"中相应"分类"总数量20% 的记录

合并数据中都是1啊,怎么会比第一步的分类中多?

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-21 14:59 | 显示全部楼层
魂断蓝桥 发表于 2017-9-21 12:58
把数据减少到50条,模拟你下你要的结果。

第一次查询返回  select 分类,COUNT(分类) as 数量 from [表 ...

蓝桥,谢谢你,你第二部分是没问题的,我用你的写法测试了,没问题,是返回合并数据中各分类的统计数,是我相要的结果,现在,就是最后一步要怎么写啊,这个我真不会,,救指教!!!

第一部分:select 分类,COUNT(*) as 数量 from [表1$] group by 分类
第二部分:select 分类,count(*) as 数量 from (select top 10 * from [表1$] order by 进价 desc union (select top 10 * from [表1$] order by 售价 desc)) group by 分类

最后一步 sql 筛选条件大概像这样: 第二部分.分类 = 第一部分.分类 and 第二部分.数量 > 第一部分.数量*0.2

TA的精华主题

TA的得分主题

发表于 2017-9-21 15:44 | 显示全部楼层
losedmouse 发表于 2017-9-21 14:59
蓝桥,谢谢你,你第二部分是没问题的,我用你的写法测试了,没问题,是返回合并数据中各分类的统计数,是 ...

select a.* from (select 分类,COUNT(分类) as 数量 from [表1$b1:b] group by 分类) a,
(select 分类,count(*) as 数量1 from (
select top 10 * from [表1$] order by 进价 desc union (select top 10 * from [表1$] order by 售价 desc)) group by 分类) b
where a.分类=b.分类 and a.数量>B.数量1*0.2

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2026-4-10 19:16 , Processed in 0.028949 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表