Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用SQLite的复杂SQL查询_Python_Sqlite_Count_Sql Order By_Distinct - Fatal编程技术网

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的用途:一旦从数据库中获取数据,就可以对其进行处理。