ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: oyzhjr

[求助] 找学习相同课程的人

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-4 16:59 | 显示全部楼层
谢谢版版的回复,代码测试略有异常,请继续努力。
若 zhh同时选了两门课,10,30. ztt选了两门课,10,20.
实际返回结果为zhh,10.

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-5 09:13 | 显示全部楼层
wuxiang_123 发表于 2013-12-4 15:17
假设表名称是表.
  1. select * from jobs2 where xm in
  2. (
  3. select xm
  4. -- ,avg(bh) as a_bh, varp(bh) as v_bh
  5. from jobs2 group by xm   
  6. having avg(bh)=(select avg(bh) from jobs2 where xm='ztt' )
  7. and varp(bh)=(select varp(bh) from jobs2 where xm='ztt')
  8. )
复制代码
根据你的思路,我修改了一下, 假设 jobs2 为表名。

根据数学上的韦达定理,若知道两个未知数的和与积,可以求出这两个未知数,这是一元二次方程的韦达定理,但是在SQL中,没有类似EXCEL 的PRODUCT 函数,可用的聚合函数中,只有用统计函数VAR来求方差。
平均值一样的两组数据,若数据本身不一样,方差也不一样。所以可以通过平均值与方差两个条件进行限定。

期待更好的思路。

TA的精华主题

TA的得分主题

发表于 2013-12-5 10:22 | 显示全部楼层
  1. SELECT T2.XM,T2.BH FROM
  2. (SELECT B.XM,SUM(1) AS 次数 FROM 表 AS A,表 AS B
  3. WHERE A.XM='ZTT' AND A.BH=B.BH AND B.XM<>'ZTT'
  4. GROUP BY B.XM
  5. HAVING SUM(1)=(SELECT SUM(1) FROM 表 WHERE XM='ZTT'))T1,
  6. (SELECT XM,BH,DSUM("1","表","XM='"&XM&"'") AS 次数 FROM 表)T2
  7. WHERE T1.XM=T2.XM AND T1.次数=T2.次数
复制代码

TA的精华主题

TA的得分主题

发表于 2013-12-5 10:37 | 显示全部楼层
  1. SELECT T4.* FROM
  2. (SELECT B.XM,SUM(1) AS 次数 FROM 表 A,表 B
  3. WHERE A.XM='ZTT' AND A.BH=B.BH AND B.XM<>'ZTT'
  4. GROUP BY B.XM)T1,
  5. (SELECT SUM(1) AS 次数 FROM 表 WHERE XM='ZTT')T2,
  6. (SELECT XM,SUM(1) AS 次数 FROM 表 WHERE XM<>'ZTT' GROUP BY XM)T3,
  7. 表 T4
  8. WHERE T3.XM=T4.XM AND T1.次数=T2.次数 AND T3.次数=T2.次数 AND T1.XM=T3.XM
复制代码

TA的精华主题

TA的得分主题

发表于 2013-12-6 09:16 | 显示全部楼层
先查出与ZTT有不同课程的人,然后再排除这些人,剩下的就是和ZTT完全一样课程的人。
  1. SELECT T2.* FROM
  2. (SELECT DISTINCT B.XM FROM
  3. (SELECT * FROM 表 WHERE XM='ZTT')A
  4. RIGHT JOIN 表 B
  5. ON A.BH=B.BH
  6. WHERE A.XM IS NULL)T1
  7. RIGHT JOIN 表 T2
  8. ON T1.XM=T2.XM
  9. WHERE T2.XM<>'ZTT' AND T1.XM IS NULL
复制代码

TA的精华主题

TA的得分主题

发表于 2013-12-6 09:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
子查询效率低,不爱用:
  1. SELECT * FROM 表 WHERE XM<>'ZTT' AND XM NOT IN
  2. (SELECT B.XM FROM
  3. (SELECT * FROM 表 WHERE XM='ZTT')A
  4. RIGHT JOIN 表 B
  5. ON A.BH=B.BH
  6. WHERE A.XM IS NULL)
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-6 13:08 | 显示全部楼层
蜚常好。等下把这道题放在EXCEL中,要求用公式来解决,不知道能不能做竞赛题出。

TA的精华主题

TA的得分主题

发表于 2013-12-6 16:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用除法的话,在xm字段上建立索引,not in 换成 not exists,效率不会低

当然也可以直接用差集except操作

TA的精华主题

TA的得分主题

发表于 2013-12-7 09:37 | 显示全部楼层
amazeyeli 发表于 2013-12-6 16:23
用除法的话,在xm字段上建立索引,not in 换成 not exists,效率不会低

当然也可以直接用差集except操作

貌似access查询不支持差集except
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 14:39 , Processed in 0.029179 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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