[英]db2 query top group by
I've been trying for hours but can't ge the query, i want to do the following using DB2.我已经尝试了几个小时但无法查询,我想使用 DB2 执行以下操作。 From table Company and Users I have the following tickets quantity info per company/user从表公司和用户我有每个公司/用户的以下门票数量信息
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
Outcome is:结果是:
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
THIS SHOULD BE THE RESULT(Top user per company)这应该是结果(每个公司的顶级用户)
user company quantity
----------------------------------
mark nissn 300
jose toyt 230
steve frd 100
steve kryr 80
as you can see there are many users in a company and each have different quantities per company, the result should get the user with the highest quantity per company.如您所见,公司中有许多用户,每个公司的用户数量不同,结果应该是每个公司数量最多的用户。 ie : Company nissn
it has 2 users and each has (mark with 300) and (tom with 145)即:公司nissn
它有 2 个用户,每个用户都有(标记为 300)和(汤姆标记为 145)
so it should give me the highest user which would be mark with 300. The same would be for toyt
, frd
, kryr
.所以它应该给我最高的用户,它将被标记为 300。对于toyt
, frd
, kryr
。 I need all of them in a query.我在查询中需要所有这些。
I wonder if that's possible in a query or I will need to create a stored procedure.我想知道这是否可以在查询中实现,或者我需要创建一个存储过程。
You can do this with analytic queries .您可以使用分析查询来做到这一点。 But be careful.但小心点。 The pattern usually works out to involve nested subqueries.该模式通常涉及嵌套子查询。 (One to produce a dataset, the next to add it to the pattern, the third to select out the rows you want.) (一个产生数据集,接下来将其添加到模式中,第三个将 select 取出您想要的行。)
In this case it should look something like this.在这种情况下,它应该看起来像这样。
Original query.原始查询。
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)
Analytic query.分析查询。 (Note that the s
is to name the subquery. I have not used DB2, but the standard strictly doesn't prevent them to be dropped, and I know at least one database that requires them.) (注意s
是为子查询命名。我没有用过 DB2,但标准严格不阻止它们被删除,我知道至少有一个数据库需要它们。)
SELECT user, quantity, company
, RANK () OVER (PARTITION BY company ORDER BY quantity DESC) as r
FROM ( ... previous query ... ) s
Final result.最后结果。
SELECT user, quantity, company
FROM ( ... previous query ... ) t
WHERE r = 1
The combined query is:组合查询是:
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
As I say I have not used DB2.正如我所说,我没有使用过 DB2。 But according to the SQL standard, that query should work.但根据 SQL 标准,该查询应该有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.