我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL 如何查询每个分组都出现的字段值

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL 如何查询每个分组都出现的字段值

SQL 如何查询每个分组都出现的字段值

数据分组以后,要找出在每个分组中都出现的某个字段值。

SQL来解决这个问题并不容易!

SQL缺少单纯的分组操作,只能返回各分组的统计值,而不能对各组的成员再进行更细的交、差、并等集合运算。要解决这种问题就需要多层嵌套子查询来变相地实现。

举个例子:查询每周都加班的员工以进行表彰。现有加班数据表OVERTIME_WORK数据如下:

WORKDATE NAME
2019-07-01 Tom
2019-07-02 John
2019-07-03 Tom
2019-07-04 Cart
2019-07-08 Tom
2019-07-09 Jordan
2019-07-10 Kate
2019-07-10 John
2019-07-15 Leon
2019-07-16 John
2019-07-17 Tom
2019-07-18 John
2019-07-22 Jim
2019-07-23 Tom
2019-07-24 John
2019-07-25 Cart

 

Oracle为例,用SQL写出来是这样:

WITH A AS

       (SELECT COUNT(*) NUM FROM

        (SELECT DISTINCT TO_CHAR(WORKDATE,"IW") FROM OVERTIME_WORK )

        ),

B AS

        (SELECT TO_CHAR(WORKDATE,"IW") W, NAME

        FROM OVERTIME_WORK

        GROUP BY TO_CHAR(WORKDATE,"IW"), NAME

        ),

C AS

       (SELECT NAME, COUNT(*) NUM FROM B GROUP BY NAME )

SELECT NAME FROM C WHERE NUM=(SELECT NUM FROM A);

这里的A查出共有几周,B查出每周加班的不同员工,C查出B里各员工的出现次数,最后从C里选出出现次数与总周数相等的员工。解决思路比较绕,这种SQL既难写又难懂。

 

集算器的SPL语言支持集合运算,解决这个问题就会简单很多,计算出每周加班员工的交集即可,只需1行代码:

connect("mydb").query("SELECT * FROM OVERTIME_WORK").group((WORKDATE-date("2019-07-01"))7).(~.(NAME)).isect()

【问题延伸】

* 查询每周至少加班两次的员工

* 查询每个月消费金额均排在前20名的客户名称

 

SPL 擅长解决这类分组子集和组内有序计算,请阅《计算各组前 N 行》《组内运算》《行间计算》《集合》

集算器 SPL 是解决 SQL 难题的专业脚本语言,它语法简单,符合自然思维,是天然分步、层次清晰的面向过程计算语言。它采用与数据库无关的统一语法,编写的算法可在数据库间无缝迁移。它是桌面级计算工具,即装即用,配置简单,调试功能完善,可设置断点、单步执行,每步执行结果都可查看。请参阅SQL 解题手

SPL也能很方便地嵌入到JAVA应用,可参考Java 如何调用 SPL 脚本》

具体使用方法可参考 《如何使用集算器》

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL 如何查询每个分组都出现的字段值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL 如何查询每个分组都出现的字段值

数据分组以后,要找出在每个分组中都出现的某个字段值。 用SQL来解决这个问题并不容易! SQL缺少单纯的分组操作,只能返回各分组的统计值,而不能对各组的成员再进行更细的交、差、并等集合运算。要解决这种问题就需要多层嵌套子查询来变相地实现。 举个例子:查询每周都
SQL 如何查询每个分组都出现的字段值
2016-08-07

SQL怎么查询每个分组都出现的字段值

今天给大家介绍一下SQL怎么查询每个分组都出现的字段值。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。数据分组以后,要找出在每个分组中都出现的某个字段值。用SQ
2023-06-03

SQL Server实现查询每个分组的前N条记录

SQL语句查询每个分组的前N条记录的实现方法:1、生成测试数据: #Tif object_id('tempdb.dbo.#T') is not null drop table #T;create table #T (ID varchar
2022-06-14

如何实现在分组的情况下,以另一个时间字段查询出结果?

假如有这样一张表:脚本如下:DROP TABLE IF EXISTS `jl_site_operation`;CREATE TABLE `jl_site_operation` ( `id` int(11) NOT NULL AUTO_INCREMENT,
2020-04-16

SQL查询之字段是逗号分隔开的数组如何查询匹配数据问题

目录字段是逗号分隔开的数组如何查询匹配数据方式一:CHARINDEX***()*****方式二:WHERE LIKEmysql逗号分隔的字段查询1.like2.find_in_set3.regexp总结字段是逗号分隔开的数组如何查询匹配数据
2023-03-06

如何解决SSM Mapper文件查询出返回数据查不到个别字段的问题

这篇文章将为大家详细讲解有关如何解决SSM Mapper文件查询出返回数据查不到个别字段的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SSM Mapper查询出返回数据查不到个别字段原因开启了驼峰命
2023-06-28

编程热搜

目录