我们有一个要求,比如通过过滤一列的不同值以及另一列的最大值来获取表的所有列。
示例:
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查询中实现这一点吗?
提前致谢
答案 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
)
还要考虑返回所有具有相同名称和数量的行