Python 使用SQLite的复杂SQL查询
我需要做一个复杂的查询,我需要帮助。以下是我拥有的一个示例:Python 使用SQLite的复杂SQL查询,python,sqlite,count,sql-order-by,distinct,Python,Sqlite,Count,Sql Order By,Distinct,我需要做一个复杂的查询,我需要帮助。以下是我拥有的一个示例: id | Date | Validity 48 | 6-1-2009 | notFound 47 | 6-1-2009 | valid 46 | 6-1-2009 | valid 45 | 3-1-2009 | invalid 44 | 3-1-2009 | invalid 42 | 4-1-2009 | notFound 41 | 4-1-20
id | Date | Validity
48 | 6-1-2009 | notFound
47 | 6-1-2009 | valid
46 | 6-1-2009 | valid
45 | 3-1-2009 | invalid
44 | 3-1-2009 | invalid
42 | 4-1-2009 | notFound
41 | 4-1-2009 | notFound
48 | 4-1-2009 | valid
[SQL来了。]
查询结果如下所示:
Date | valid | invalid | notFound
3-1-2009 | 0 | 2 | 0
4-1-2009 | 1 | 2 | 2
6-1-2009 | 3 | 2 | 3
我只能在SQLite中执行此操作吗?有人能帮我吗?我在Python中工作
我需要这个来生成一个折线图。例如: 我认为这应该做到:
SELECT Date,
SUM(Validity = "valid") AS valid,
SUM(Validity = "invalid") AS invalid,
SUM(Validity = "notFound") AS notFound
FROM table_name
GROUP BY Date
SUM函数将统计各种有效性类型的总计数。当为false时,'='函数返回0,当为true时返回1,这就是允许此操作的原因
**编辑**
我刚刚意识到这并不是你想要的,因为你在寻找每个日期的总体汇总,其中还包括前一个日期的数据。这可以在python中相当容易地完成
valid_sum = 0
invalid_sum = 0
notfound_sum = 0
for r in cursor.fetchall():
date = r[0]
valid_sum += int(r[1])
invalid_sum += int(r[2])
notfound_sum += int(r[3])
# print aggregate data for this date
日期列无法正确排序,因为它没有以最重要的字段“年份”开头
假设您将日期更改为正确的yyyy-mm-dd格式,您可以使用如下内容:
SELECT A.Date,
(SELECT COUNT(*) FROM MyTable AS B
WHERE B.Date <= A.Date
AND B.Validity = 'valid') AS valid,
(SELECT COUNT(*) FROM MyTable AS B
WHERE B.Date <= A.Date
AND B.Validity = 'invalid') AS invalid,
(SELECT COUNT(*) FROM MyTable AS B
WHERE B.Date <= A.Date
AND B.Validity = 'notFound') AS notFound
FROM (SELECT DISTINCT Date FROM MyTable
ORDER BY Date) AS A
不,不能仅在SQL中执行此操作。这就是Python的用途:一旦从数据库中获取数据,就可以对其进行处理。