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



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

例:

Table A
id name qty
__ __ __
1 Dinesh 10
2 Ramesh 8
3 Dinesh 2
4 Ganesh 3
5 Ganesh 20

这里获取不同的名称以及最大(数量);

预期产出:

1 Dinesh 10
2 Ramesh 8
5 Ganesh 20

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

提前致谢

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

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)
    )

//编辑:在 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
 )

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

最新更新