gpt4 book ai didi

sql - db2 查询最高分组依据

转载 作者:行者123 更新时间:2023-12-04 22:05:27 24 4
gpt4 key购买 nike

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

QUERY USING:
SELECT T.USER, COUNT(T.USER) AS QUANITTY, 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
----------------------------------
mark nissn 300
tom toyt 50
steve kryr 80
mark frd 20
tom toyt 120
jose toyt 230
tom nissn 145
steve toyt 10
jose kryr 35
steve frd 100

这应该是结果(每个公司的顶级用户)

user         company      quantity
----------------------------------
mark nissn 300
jose toyt 230
steve frd 100
steve kryr 80

如您所见,一家公司有很多用户,每个公司的用户数量不同,结果应该获得每家公司数量最多的用户。即:nissn 公司有 2 个用户,每个用户有(标记为 300)和(tom 为 145)

所以它应该给我最高的用户,标记为 300。对于 toytfrdkryr 也是如此。我在查询中需要所有这些。
我想知道这在查询中是否可行,或者我需要创建一个存储过程。

最佳答案

您可以使用 analytic queries 执行此操作.不过要小心。该模式通常涉及嵌套子查询。 (一个用于生成数据集,下一个用于将其添加到模式中,第三个用于选择您想要的行。)

在这种情况下,它应该看起来像这样。

原始查询。

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 是为子查询命名的。我没有使用过 DB2,但标准严格不会阻止它们被删除,而且我知道至少有一个数据库需要它们。)

SELECT user, quantity, company
, RANK () OVER (PARTITION BY company ORDER BY quantity DESC) as r
FROM ( ... previous query ... ) s

最终结果。

SELECT user, quantity, company
FROM ( ... previous query ... ) t
WHERE r = 1

组合查询为:

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

正如我所说,我没有使用过 DB2。但根据 SQL 标准,该查询应该有效。

关于sql - db2 查询最高分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6336879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com