我有一张看起来像这样的表:
A B C
1 2 2
3 4 6
1 2 3
3 4 5
3 4 4
1 2 1
我需要做的是给出一组代表 A 和 B 的二维元组,我需要为每个具有最大 C
例如,如果我的数组是[(1,2)]
,那么我的结果表就像A=1
和B=2
一样,那么我的最大 C 是3
A B C
1 2 3
如果我的数组是[(1,2), (3,4)]
,那么我的结果表就像A=1
和B=2
一样,那么我的最大 C 是3而{{1} }}和A=3
我的最大 C 是6
B=4
我觉得这可以通过使用SQl子查询来完成。有点像:
A B C
1 2 3
3 4 6
在单个SQL查询中执行此操作是否有益处,而不是对我的数组的每个元素执行SQL查询?
答案 0 :(得分:1)
使用GROUP BY
和MAX
:
SELECT A, B, MAX(C) AS C
FROM tab
GROUP BY A, B
ORDER BY A, B;
修改强>
如果SQL Server可以使用表变量:
DECLARE @my_array AS TABLE(A INT, B INT);
INSERT INTO @my_array(A, B) VALUES (1,2);
SELECT t.A, t.B, MAX(t.C) AS C
FROM tab t
JOIN @my_array ma
ON t.A = ma.A AND t.B = ma.B
GROUP BY t.A, t.B
ORDER BY t.A, t.B;
<强> Rextester Demo 强>
答案 1 :(得分:0)
SELECT A, B, MAX(C) AS C FROM #temp where a=1 and b=2 GROUP BY A, B
答案 2 :(得分:0)
共同相关的子查询将会这样做:
select t1.*
from my_table t1
where (t1.a, t1.b) = in ( values (1,2), (3,4) )
and t1.c = (select max(c)
from my_table t2
where t1.a = t2.a
and t1.b = t2.b)
order by t1.a, t1.b;
如果您愿意,可以避免使用共同相关的子查询。有时它们往往比同等解决方案慢:
select t1.*
from my_table t1
where (t1.a, t1.b, t1.c) in (select t2.a, t2.b, max(t2.c)
from my_table t2
where (t2.a, t2.b) in (values (1,2), (3,4))
group by t2.a, t2.b)
order by t1.a, t1.b;
values (1,2), (3,4)
的部分是你&#34;数组输入&#34;。
以上是标准的ANSI SQL。