我具有以下表结构:
phoneNumberPage_phoneEdtTxt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.toString().length() < 11) {
enableDisableBtn(0.3f, false);
} else {
hideKeyboard(activity);
enableDisableBtn(1.0f, true);
}
}
@Override
public void afterTextChanged(Editable s) {
if (s.toString().trim().length()==1){
if (!s.equals("0")){
Toast.makeText(context, "NOOOOOO", Toast.LENGTH_SHORT).show();
}
}
}
});
}
我需要一个查询,其中包含“ Id”,“ Num1”之和,“ Num2”之和,“ Num3”的最大值以及与“ Num3”的最大值相关的“类型”。 因此,所需的输出是:
Id Num1 Num2 Type Num3
1 2 2 1 4
1 3 1 2 5
1 1 1 3 2
2 2 1 1 3
2 0 1 2 2
2 4 3 3 6
没有这个相关的“类型”,下面的查询可以正常工作:
Id Sum(Num1) Sum(Num2) type Max(Num3)
1 6 4 2 5
2 6 4 3 6
我尝试了子查询的不同方法,但是还不能使它工作。
答案 0 :(得分:2)
您的问题有点像每个组的最大值问题。在这种情况下,我们可以使用子查询为每个Num3
查找最大Id
值。但是,在同一子查询中,我们还计算总和。
SELECT
t1.Id,
t2.s1,
t2.s2,
t1.Type,
t1.Num3
FROM yourTable t1
INNER JOIN
(
SELECT Id, SUM(Num1) AS s1, SUM(Num2) AS s2, MAX(Num3) AS m3
FROM yourTable
GROUP BY Id
) t2
ON t1.Id = t2.Id AND t1.Num3 = t2.m3;
作为MySQL 8+的入门技巧,为了抵御恶魔,我们还可以使用分析函数编写查询:
SELECT Id, s1, s2, Type, Num3
FROM
(
SELECT
Id,
SUM(Num1) OVER (PARTITION BY Id) s1,
SUM(Num2) OVER (PARTITION BY Id) s2,
Type,
Num3,
MAX(Num3) OVER (PARTITION BY Id) m3
FROM yourTable
) t
WHERE Num3 = m3;