首页 > 解决方案 > 使用 IN 子句和 WHERE 条件查找多个 MAX 值

问题描述

给定一个简单的表格:

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'

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

标签: sqldatabaseoraclegroup-by

解决方案


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

SELECT ColumnWhereIn, MAX(ColumnSearched) AS MaxColumnSearched
FROM MyTable
WHERE ColumnWhere = 1234
GROUP BY ColumnWhereIn

推荐阅读