我们有一个要求,例如通过过滤一列的不同值以及另一列的最大值来获取表的所有列。
例子:
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 查询中实现这一点?
提前致谢
我们有一个要求,例如通过过滤一列的不同值以及另一列的最大值来获取表的所有列。
例子:
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 查询中实现这一点?
提前致谢
您可以使用相关的子查询来执行此操作。
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
)
还考虑到将返回所有具有相同名称和数量的行