sqlite - 我将如何返回表中所有行的计数,然后返回每次找到特定状态的计数?
问题描述
请原谅我对 sqlalchemy 的无知,到目前为止,我已经能够很好地在海洋中航行。我要做的是:
- 返回表中有多少项目的计数。
- 返回表中出现不同状态的次数。
我目前正在使用 sqlalchemy,但即使是纯 sqlite 解决方案也有助于弄清楚我缺少什么。
这是我的表的配置方式:
class KbStatus(db.Model):
id = db.Column(db.Integer, primary_key=True)
status = db.Column(db.String, nullable=False)
这是一个非常基本的表格,但我很难取回我正在寻找的数据。我有两个单独的查询,但我必须相信有一种方法可以在一个查询中完成这一切。
以下是我正在运行的单独查询:
total = len(cls.query.all())
status_count = cls.query.with_entities(KbStatus.status, func.count(KbStatus.id).label("total")).group_by(KbStatus.status).all()
从这里我将其转换为 dict 并将其组合以使输出如下所示:
{
"data": {
"status_count": {
"Assigned": 1,
"In Progress": 1,
"Peer Review": 1,
"Ready to Publish": 1,
"Unassigned": 4
},
"total_requests": 8
}
}
任何帮助是极大的赞赏。
解决方案
我不了解 sqlalchemy,但可以使用JSON1扩展在纯 sqlite 的单个查询中生成您想要的结果:
给定下表和数据:
CREATE TABLE data(id INTEGER PRIMARY KEY, status TEXT);
INSERT INTO data(status) VALUES ('Assigned'),('In Progress'),('Peer Review'),('Ready to Publish')
,('Unassigned'),('Unassigned'),('Unassigned'),('Unassigned');
CREATE INDEX data_idx_status ON data(status);
这个查询
WITH individuals AS (SELECT status, count(status) AS total FROM data GROUP BY status)
SELECT json_object('data'
, json_object('status_count'
, json_group_object(status, total)
, 'total_requests'
, (SELECT sum(total) FROM individuals)))
FROM individuals;
将返回一行保存(通过 JSON 漂亮打印机运行后;实际字符串更紧凑):
{
"data": {
"status_count": {
"Assigned": 1,
"In Progress": 1,
"Peer Review": 1,
"Ready to Publish": 1,
"Unassigned": 4
},
"total_requests": 8
}
}
如果您使用的 sqlite 实例不是在支持 JSON1 的情况下构建的:
SELECT status, count(status) AS total FROM data GROUP BY status;
会给
status total
-------------------- ----------
Assigned 1
In Progress 1
Peer Review 1
Ready to Publish 1
Unassigned 4
您可以在 python 中遍历它,将每一行插入到您的 dict中,并在最后total
获取total_requests
值时将另一个变量中的所有值相加。不需要另一个查询来计算这个数字;手动完成。我敢打赌,用现有的第二个 sqlachemy 查询做同样的事情真的很容易。
推荐阅读
- javascript - 传单:当缩放相同时删除上一层并添加新的点击层
- postgresql - 意外的数据包类型:Postgres 中抛出 52 - QueryExecutorImpl.processResults
- eclipse - 在 Git 中标记为假定未更改的文件在哪里?
- java - 哪种方法更好地比较方法检查中的值或检查它是否存在于数组中?
- c# - 尝试更新 gridview 中的一行时,会出现以下错误?
- python - 如何合并两个数据框并在其中保留非nan值
- sql - 在从 XML Column 编写 oracle 查询时需要帮助
- php - 使用方括号而不是大括号创建 JSON
- python - Python 中的自动化:将混合 xls 转换为 html
- reactjs - 在 sweetalert2 中显示来自 preConfirm 的错误消息