sql - 从表中计算多个列值
问题描述
这是一个简单的表格,如下所示:
id TEXT,
name TEXT,
FOREIGN KEY(id) REFERENCES users(id) ON DELETE CASCADE,
PRIMARY KEY(id, name)
我想要的是能够获得一组包含该表中所有名称的计数的行。基本上每个名称出现在表中的次数。
到目前为止,这是我的代码,它可以工作:
var names = ['upload_files', 'create_users', 'remove_users', 'edit_tags'];
var query = 'SELECT COUNT(p.id) AS count FROM perms p JOIN users u ON p.id = u.id WHERE p.name = ?',
for(let name of names){
this.db.prepare(query).all([name]).map(value => data[name] = value.count);
}
它产生这样的东西:
upload_files: 5,
create_users: 2,
remove_users: 2,
edit_tags: 5,
假设有 5 行upload_files
, 2 行,remove_users
依此类推......
但是当我有 50K 记录时它非常慢,每个查询需要 2 秒。
它可以组合在一个查询中吗?这样我可以将所有名字的时间减少到 2 秒
解决方案
使用名称过滤名称IN
并按名称分组。
SELECT p.name,
count(p.id) count
FROM perms p
WHERE p.name IN ('upload_files',
'create_users',
'remove_users',
'edit_tags')
GROUP BY p.name;
并考虑尝试索引是否name
可以加快速度。
推荐阅读
- db2 - 在 IBM DB2 上运行 SQL 脚本时收到警告消息
- android - 如何计算通知生成器的点击次数
- c++ - 在 C++ 中使用 switch 语句将不同的函数分配为类属性
- python - 如果先前生成的值被显式设置为新种子,为什么 Python random.random() 会给出不同的值?
- reactjs - 更新到 useState 后数据未映射 - React
- python - 用“onclick = (PythonScript(link))”切换所有“href = (link)”
- html - 添加 img 标签会导致溢出。如何避免这种情况
- python - form.is_valid() 在使用手机作为主键时抛出错误
- javascript - Android:Cordova 我需要从相机捕捉照片肖像
- google-app-engine - 使用 App Engine 在本地测试 Cloud SQL 的问题