sql查询结果分组_sql 分组查询

sql查询结果分组_sql 分组查询数据分组以后,要找出在每个分组中都出现的某个字段值。 用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 脚本》

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8117.html

(0)
上一篇 2023-03-07
下一篇 2023-03-07

相关推荐

  • oracle数据泵导入导出部分用户「建议收藏」

    oracle数据泵导入导出部分用户「建议收藏」问题描述:需要将140服务器中的tbomnew实例下的部分用户导入到118服务器下的tbompx实例中,本次导入导出的两个数据库均为19C 部分用户名:CORE,MSTDATA,BOMMGMT,CFG

    2023-01-23
    143
  • MongoDB安装调试

    MongoDB安装调试1:安装 去mongodb的官网http://www.mongodb.org/downloads下载32bit的包 解压后会出现以下文件 在安装的盘C:下建立mongodb文件夹,拷贝bin文件夹到该

    2022-12-16
    141
  • 【Gap锁】Mysql的Gap锁在中文列下间隙怎样确定?「建议收藏」

    【Gap锁】Mysql的Gap锁在中文列下间隙怎样确定?「建议收藏」通过本文记录一次Gaplock的验证,网上大多gaplock是基于明确是数字型列来测试gaplock的,这里不再重复,随便贴个相关地址:https://www.cnblogs.com/crazylqy

    2022-12-26
    140
  • Python中使用元组进行不可变序列操作

    Python中使用元组进行不可变序列操作元组(Tuple)是Python中的一种不可变类型序列,用于存储一组数据。元组的创建方式与列表相似,用小括号 “( )” 将元素括起来,多个元素之间用逗号 “,” 隔开。虽然元组和列表都是序列类型,但元组不可变的特性使其在某些场景下具有优势,尤其是在保证数据不被修改的情况下,可以提高代码的安全性和效率。

    2023-12-06
    113
  • Python工程师:解析tempstr

    Python工程师:解析tempstr作为一名Python工程师,我们时常需要处理大量的数据,其中常用的一种数据格式就是字符串。而在字符串处理中,使用正则表达式是一种非常高效和灵活的方式,而正则表达式的一个关键就是:解析字符串。在这篇文章中,我们将会介绍如何使用Python来解析字符串,并针对不同场景进行实例演示。

    2024-04-16
    82
  • GROUP BY中的WITH CUBE、WITH ROLLUP原理测试及GROUPING应用[通俗易懂]

    GROUP BY中的WITH CUBE、WITH ROLLUP原理测试及GROUPING应用[通俗易懂]前几天,看到一个群友用WITH ROLLUP运算符。由于自个儿没用过,看到概念及结果都云里雾里的,所以突然来了兴趣对生成结果测了一番。 一、概念: WITH CUBE:生成的结果集显示了所选列中值的所

    2022-12-16
    137
  • 基于MySQL 的 SQL 优化总结[通俗易懂]

    基于MySQL 的 SQL 优化总结[通俗易懂]文章首发于我的个人博客,欢迎访问。https://blog.itzhouq.cn/mysql1 基于MySQL 的 SQL 优化总结 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务。例行

    2023-02-28
    163
  • openGauss SQL引擎 (上)「建议收藏」

    openGauss SQL引擎 (上)「建议收藏」数据库的SQL引擎是数据库重要的子系统之一,它对上负责承接应用程序发送的SQL语句,对下负责指挥执行器运行执行计划。其中优化器作为SQL引擎中最重要、最复杂的模块,被称为数据库的“大脑”,优化器产生…

    2023-04-14
    154

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注