按 DB2 划分的顶级组

2023-12-09

我已经尝试了几个小时,但无法让查询使用 DB2 执行我想要的操作。 从表“公司和用户”中,我有每个公司/用户的以下门票数量信息

user         company      quantity
------------ ------------ ------------
mark         nissan       300
tom          toyota       50
steve        krysler      80
mark         ford         20
tom          toyota       120
jose         toyota       230
tom          nissan       145
steve        toyota       10
jose         krysler      35
steve        ford         100

这是由查询生成的:

SELECT T.USER, COUNT(T.USER) AS QUANTITY, T.COMPANY FROM TICKET T
INNER JOIN COMPANY P ON P.COMPANY = T.COMPANY 
GROUP BY (T.USER, T.COMPANY) -- ORDER BY QUANTITY DESC

我想看到的是每个公司的顶级用户,因此根据上面的数据,查询应该向我显示:

user         company      quantity (Top user per company)
------------ ------------ --------------------------------
mark         nissan       300
jose         toyota       230
steve        ford         100
steve        krysler      80

我该如何编写 SQL 来返回这个结果?


最终答案(在评论中注明):

SELECT user, quantity, company
  FROM (SELECT user, quantity, company,
               RANK () OVER (PARTITION BY company ORDER BY quantity DESC) AS r
          FROM (SELECT T.USER, COUNT(T.USER) AS QUANTITY, T.COMPANY
                  FROM TICKET T JOIN COMPANY P ON P.COMPANY = T.COMPANY
                 GROUP BY (T.USER, T.COMPANY) ) s ) t
 WHERE r = 1;

一步步把它建立起来。

假设问题中显示的第一个数据表称为“门票”,请查找每个公司的最大数量:

SELECT Company, MAX(Quantity) AS MaxQuantity
  FROM Tickets
 GROUP BY Company;

现在,查找该公司具有最大数量的用户的数据:

SELECT T.User, T.Company, M.MaxQuantity
  FROM Tickets AS T
  JOIN (SELECT Company, MAX(Quantity) AS MaxQuantity
          FROM Tickets
         GROUP BY Company) AS M
    ON T.Company = M.Company AND T.Quantity = M.MaxQuantity;

例如,如果特定公司的最高数量为 200,并且该公司的两个用户的得分均为 200,则此查询会列出这两个用户。

现在,如果您的意思是问题中显示的查询生成第一个结果表,那么我上面所说的门票需要是派生表:

SELECT T.User, COUNT(T.User) AS Quantity, T.Ccompany
  FROM Ticket AS T
 INNER JOIN Company AS P ON P.Company = T.Company 
 GROUP BY (T.User, T.Company)
 ORDER BY QUANTITY DESC 

在这种情况下,我们可以使用WITH子句(语法未经检查,但我认为根据SQL标准它是正确的):

WITH Tickets AS
    (SELECT T.User, COUNT(T.User) AS Quantity, T.Ccompany
       FROM Ticket AS T
       JOIN Company AS P ON P.Company = T.Company 
      GROUP BY (T.User, T.Company)
    )
SELECT T.User, T.Company, M.MaxQuantity
  FROM Tickets AS T
  JOIN (SELECT Company, MAX(Quantity) AS MaxQuantity
          FROM Tickets
         GROUP BY Company) AS M
    ON T.Company = M.Company AND T.Quantity = M.MaxQuantity;

显然,如果您愿意,也可以将WITH 子查询写出两次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按 DB2 划分的顶级组 的相关文章

随机推荐

  • 在 PHP 中将数据库结果回显为 html 代码的最佳方法是什么?

    当我在数据库中有这样的值时 foo 我怎样才能在不与html代码冲突的情况下回显它 notice
  • cv2.VideoWriter 的输出不正确。速度更快了

    我正在尝试使用 opencv 的 cv2 VideoWriter 录制一段视频一段时间 问题是输出不正确 例如 10秒的视频只有2秒 并且播放速度更快 这是我的代码 欢迎任何建议或想法 另外 另一个问题是输出视频没有声音 谢谢 主机 树莓派
  • 从密码生成密钥对

    我想使用基于密码的私钥的非对称加密 要求是提供的安全级别必须与 1 使用基于密码的对称加密 2 以 常规 方式使用非对称加密相同 我将不得不在 Java 中使用它 但答案可以是通用的 我知道我可以生成密钥对并使用基于密码的对称密钥加密私钥
  • 是否有 .NET StringBuilder 功能版本的开源(非 GPL)实现?

    我正在寻找 StringBuilder 或等效项的功能 如非命令式 实现 我见过一些函数式数组的实现 但它们本身不支持插入 开源 非 L A GPL 的奖励 F 的奖励 但如果需要 我可以从 Haskell OCaml SML 进行翻译 欢
  • 经典 ASP - 将属性作为 byref 传递

    在经典 ASP 中 我有一个对象 称之为bob 那么它有一个名为name with let and get方法 我有一个函数如下 sub append byref a b a a b end sub 这只是为了更快地向变量添加文本 我也有同
  • 在 Android 中录制声音并读取振幅

    我正在尝试制作一个应用程序 记录声音一秒钟 然后从记录的声音中读取最大幅度 这是我到目前为止所拥有的 但我的应用程序崩溃了 我不明白为什么 这是我的第二个活动 我在按下 记录 按钮后从第一个活动中调用该活动 该应用程序在我的模拟器和手机上崩
  • 如何让 jquery-ui 自动完成退出 iframe?

    是否可以使自动完成 jQueryUI 的建议从一个 iframe 中出来 具有与 select 元素相同的行为 我举一个例子 http jsbin com ehidef 1 事实上 这是可以做到的 尽管一些样式是强制性的 jQueryUI
  • Autoconf 路径中存在空格

    我刚刚将一个 C 项目转换为一个 autotools 项目 并在 configure ac 中编写了几行here 当我的路径应该是 bla bla 时 构建失败并显示 sh home me bla 没有这样的文件或目录 问题是我没有在任何地
  • NSArray 对 ARC 下对象的弱引用 (__unsafe_unretained)

    我需要在 NSArray 中存储对对象的弱引用 以防止保留循环 我不确定要使用的正确语法 这是正确的方法吗 Foo foo1 Foo alloc init Foo foo2 Foo alloc init unsafe unretained
  • WPF 和 CefSharp:性能低下

    我已经成功地用 c winforms 制作了一个个人迷你浏览器应用程序 因为我想要一些更奇特的效果 所以我正在考虑制作一个 WPF 应用程序 因此 我尝试了 wiki 教程并使用浏览器设置了一个简单的 WPF 表单 但注意到它的性能很慢 当
  • C#,如何访问当前线程中在其他线程中创建的内容?

    我正在用 C 编写聊天客户端 服务器应用程序 但我遇到了线程问题 我写了这个简单的代码来显示我的问题 我使用 thread 1 来显示 Form 但它只显示了一秒钟 也许 thread 1 终止并关闭了 Form 但我 IsAlive 说它
  • C4473 结构分配警告

    我目前正在做一项作业 很好奇编译时出现的警告是什么以及如何补救 它会构建 但当我调试时 它会出现错误屏幕 下面是出现的警告 1 gt c 用户 cesteves documents c 编程 库存 库存 inventory cpp 48 警
  • 将广播意图从服务发送到应用程序类

    是否可以将意图从服务发送到应用程序类 不是活动 我不知道在特定时间将运行什么活动 因此我在活动类中添加一个布尔标志 用于检测活动并根据收到的广播发送适当的数据 If your Service是活跃的 那么你的Application类是act
  • EF 6 与 ODP.Net Oracle.ManagedDataAccess,如何对类属性使用非大写字母?

    我正在将 EF 6 与 ODP Net 结合使用Oracle ManagedDataAccess对于我的 ASP Net MVC Web 应用程序 我有以下内容Model called Employee in Model Employee
  • 使用 Facebook iOS SDK 2,我如何喜欢某个页面? - “应用程序必须在白名单中”

    如何使用新的 Facebook iOS SDK 喜欢 某个页面 http github com facebook facebook ios sdk 我目前正在尝试这样做 NSMutableDictionary dict NSMutableD
  • Angular 6 仅需要多个字段中的一个字段反应形式

    我是角度新手 我有一种情况 我只需要表单中 5 个字段中的一个字段 这意味着如果用户至少填写一个字段 那么表单就有效 提前致谢 由于只有当其中一个字段非空时才需要检查整个表单的有效性 因此您可以手动设置有效性 如下所示 if this va
  • R stargazer:不同的小数

    我的 R 中的 stargazer 输出有问题 这是我的原始数据框 Rank p LMax 10 5 1 var1 0 427 24 25 21 8 27 4 31 5 var2 0 228 7 23 11 5 12 2 16 7 观星者创
  • Swift:从字节数据中提取浮点数

    我正在寻找一种健壮且优雅的方法来从数组中提取四个大端字节作为浮点数 我可以通过如下方式获得带有位的 UInt32 let data Byte 0x00 0x00 0x00 0x40 0x86 0x66 0x66 0x00 let dataP
  • 我可以将 Stream> 转换为 Stream 吗? [复制]

    这个问题在这里已经有答案了 这可能吗 伪Java someList 1 2 3 4 Stream
  • 按 DB2 划分的顶级组

    我已经尝试了几个小时 但无法让查询使用 DB2 执行我想要的操作 从表 公司和用户 中 我有每个公司 用户的以下门票数量信息 user company quantity mark nissan 300 tom toyota 50 steve