以下查询可正常运行:
<provider android:authorities="com.myapp.crashlyticsinitprovider" android:exported="false" android:initOrder="90" android:name="com.crashlytics.android.CrashlyticsInitProvider"/>
<provider android:authorities="com.myapp.testapp.lifecycle-trojan" android:exported="false" android:multiprocess="true" android:name="android.arch.lifecycle.ProcessLifecycleOwnerInitializer"/>
但是,我尝试使存储桶大小自动调整到值的范围,以使整个范围内总共有10个存储桶:
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', (line) => {
var n = line.split(' ');
for (var i = 0; i < n.length; i++) {
var r = parseInt(n[i][0]);
var e = parseInt(n[i][1]);
var c = parseInt(n[i][2]);
if (r > e - c) {
console.log("do not advertise");
}
else if (r < e - c) {
console.log("advertise");
} else {
console.log("does not matter");
}
}
});
此失败查询中的想法是使用最大值(假设最小值为0)以得出存储桶大小。有没有办法使它起作用,或者完全使用更好的方法?
答案 0 :(得分:1)
您需要使用单独的子查询显式计算max(duration)
。
将max(duration)
替换为(SELECT max(duration) FROM flights)
。
作为副作用,flights
表将被读取两次。
应该准确地阅读两次,而不是更多。您可以通过运行EXPLAIN <your query>
并在输出中搜索Scan
来进行验证。
如果flights
使扫描仪两次以上,则可以进一步改善。
实际上,改进后的版本可能更易于阅读(我通过引用首选项还使用了简写GROUP BY
,ORDER BY
子句):
SELECT
floor(duration / (max_duration/10)) * (max_duration/10) as bucket,
count(*) as count
FROM flights, (SELECT max(duration) max_duration FROM flights)
GROUP BY 1
ORDER BY 1