使用IN子句和WHERE条件查找多个MAX值

问题描述 投票:0回答:1

给出一个简单的表:

ColumnWhereIn    ColumnWhere    ColumnSearched
A                   1234                1
A                   1234                2
B                   1234                3
B                   1234                4
C                   1234                5
C                   1234                6

我想找到最大的ColumnSearched值。因此,预期结果是:

{A: 2, B: 4, C: 6}

我尝试了以下查询:

SELECT mt.ColumnSearched AS cs, mt.ColumnWhereIn AS cwi FROM MyTable mt
 WHERE (mt.ColumnSearched, mt.ColumnWhereIn) IN
 (SELECT MAX(ColumnSearched), ColumnWhereIn FROM MyTable
 WHERE ColumnWhere = 1234
AND ColumnWhereIn IN ('A', 'B', 'C')
GROUP BY ColumnWhereIn)

但是它不返回任何记录。显然,我可以像这样运行三个选择:

SELECT MAX(ColumnSearched) FROM MyTable
WHERE ColumnWhere = 1234 AND ColumnWhereIn = 'A'

但是我想知道是否有更清洁的解决方案。

sql database oracle group-by
1个回答
2
投票

只需将ColumnWhereIn添加到SELECT和GROUP BY子句:

SELECT ColumnWhereIn, MAX(ColumnSearched) AS MaxColumnSearched
FROM MyTable
WHERE ColumnWhere = 1234
GROUP BY ColumnWhereIn
© www.soinside.com 2019 - 2024. All rights reserved.