【发布时间】:2021-11-18 10:30:24
【问题描述】:
我需要为每个组选择具有 MAX(val1) 的行。 如果有多个等于 val1 = MAX(val1) 的行,我需要从它们中选择具有 MAX(val2) 的行,等等。 在伪代码中应该是这样的:
IF row1.val1 != row2.val1
GET MAX(val1)
ELSE
GET MAX(val2)
例如:
我有一个表nums,其中一个TEXT 列name 和三个INTEGER 列-id、num1 和num2 填充了值:
id name num1 num2
1 Name1 10 20
2 Name1 10 30
3 Name2 08 15
4 Name2 10 20
5 Name3 20 2
6 Name3 20 1
我需要一个查询,它将返回给我:
2
4
5
可能是这样的
SELECT id FROM nums GROUP BY name HAVING MAX(num1, num2)
但是 MAX(num1, num2) 不起作用。
我在 python3.8 中使用 sqlite3 模块。
【问题讨论】:
-
您的查询语法不正确。请发布一些示例数据和预期输出。
-
@AnkitBajpai 发布示例数据和预期输出
-
HAVING 要求您创建一个真/假语句,例如“HAVING max(val1) > 3”。由于您不知道单个 SQL 中的最大值,因此您将不得不嵌套两个 SQL,一个用于计算最大值,另一个用于比较和过滤。有几种方法可以做到这一点。
-
寻找相关的子查询并使用 MAX 作为窗口函数。