获取具有一列不同值的记录以及另一列的最大值

时间:2012-10-03 09:55:58

标签: db2

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

示例:

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查询中实现这一点吗?

提前致谢

2 个答案:

答案 0 :(得分: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)
    )

答案 1 :(得分: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
 )

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