我需要用纯SQL解决此问题: 我必须计算具有特定值的所有记录: 在我的表中,有一个列标记,其值为0或1。我需要对最后0之后的所有1进行计数,并对这些记录的列总数求和。
示例:
Flag | Amount
0 | 5
1 | 8
0 | 10
1 | 20
1 | 30
输出:
2 | 50
如果最后一个值为0,则无需执行任何操作。 我赶紧进行一下快速查询(可能只访问一次)。
答案 0 :(得分:1)
我假设您的示例表在逻辑上按金额排序。然后,您可以执行以下操作:
select
count(*) as cnt
,sum(Amount) as Amount
from yourTable
where Amount > (select max(Amount) from yourTable where Flag = 0)
如果最大值来自行where Flag = 0
,则不会返回任何内容。
答案 1 :(得分:0)
如果您的表中可能不包含任何零,那么使用以下方法会更安全:
select count(*) as cnt, sum(Amount) as Amount
from t
where Amount > all (select Amount from t where Flag = 0)
或者,使用窗口功能:
select count(*) as cnt, sum(amount) as amount
from (select t.*, max(case when flag = 0 then amount end) as flag0_amount
from t
) t
where flag0_amount is null or amount > flag0_amount
答案 2 :(得分:0)
我自己找到解决方案:
_isButtonTapped = false
Widget _buildButton(String key, Text title, String url) {
_onTapped() async {
if (await canLaunch(url)) {
launch(url).whenComplete(
() => setState(() {
_isButtonTapped = false;
}),
);
}
}
return GestureDetector(
onTap: () {
_isButtonTapped ? null : _onTapped();
setState(() {
_isButtonTapped = true;
});
},
child: Container(
child: Padding(
padding: EdgeInsets.all(6.0),
child: Center(child: title),
),
),
);
}