1

我们有一个要求,例如通过过滤一列的不同值以及另一列的最大值来获取表的所有列。

例子:

Table A

id name qty
__ __ __

1 Dinesh 10
2 Ramesh 8
3 Dinesh 2
4 Ganesh 3
5 Ganesh 20

在这里获取不同的名称以及 max(qty);

预期输出:

1 Dinesh 10
2 Ramesh 8
5 Ganesh 20

谁能说如何在 DB2 查询中实现这一点?

提前致谢

4

2 回答 2

2

您可以使用相关的子查询来执行此操作。

SELECT T.id, T.name, T.qty
FROM tableA T
WHERE T.qty = (
    SELECT MAX(qty)
    FROM tableA
    WHERE name = T.name
)

但是,请注意,如果有另一条具有相同名称和最大数量的记录(例如6 Dinesh 10),则将返回两条记录。这可以通过稍微不同的方式编写查询来解决:

SELECT T.id, T.name, T.qty
FROM tableA T
WHERE NOT EXISTS (
    SELECT 1
    FROM tableA
    WHERE name = T.name
        AND qty > T.qty
        OR (id > T.id AND qty = T.qty)
    )
于 2012-10-03T10:07:41.283 回答
1

//编辑:在acatt评论之后,我理解了要求......

另一种选择是:

SELECT t.id, t.name, t.qty
  FROM tableA t
 WHERE (t.name, t.qty) in (
    SELECT q.name, max(q.qty)
    FROM tableA q
    group by q.name
 )

还考虑到将返回所有具有相同名称和数量的行

于 2012-10-03T10:16:27.190 回答