Python 使用“时获取空行”;案例;(在使用聚合时,实际上是这样)
我正在用python脚本查询sqlite数据库表Python 使用“时获取空行”;案例;(在使用聚合时,实际上是这样),python,sqlite,Python,Sqlite,我正在用python脚本查询sqlite数据库表 SELECT servername, date('now','localtime'), sum(CASE WHEN locked="NO" THEN 1 END), sum(CASE WHEN locked="YES" THEN 1 END) FROM nodes WHERE servername="SOME_SERVER" 它工作正常(给我服务器名、今天的日期、解锁节点的数量和锁定节点的数量) 。。。除非查询
SELECT servername,
date('now','localtime'),
sum(CASE WHEN locked="NO" THEN 1 END),
sum(CASE WHEN locked="YES" THEN 1 END)
FROM nodes
WHERE servername="SOME_SERVER"
它工作正常(给我服务器名、今天的日期、解锁节点的数量和锁定节点的数量)
。。。除非查询没有匹配项(即,没有提供名称的servername)。在这种情况下,查询结果是
空,“2013-04-15”,空,空
(为了清晰起见,我添加了空值)
某些服务器没有节点是有效的。如果我从查询中删除“cases”,我不会得到任何查询结果,因此它们会导致我在不需要时得到一个结果
如何使它在SQL查询中不返回任何内容,而不用在python中检测它,或者事先查询计数?Hmm添加一个
group by servername
如果没有匹配,空白线就会消失,就像我偶然发现的一样。我很难解释这一点,但我认为sqlite文档中包含了这一点:
如果SELECT语句是没有GROUP BY的聚合查询 子句,然后计算结果集中的每个聚合表达式 一旦跨越整个数据集。中的每个非聚合表达式 结果集对任意选择的数据行计算一次 数据集。每一行使用相同的任意选择行 非聚合表达式。或者,如果数据集包含零行,则 每个非聚合表达式都针对一行进行求值,该行包括 完全由空值组成 通过计算聚合创建的结果集数据的单行 结果集中的非聚合表达式构成 不带GROUPBY子句的聚合查询一个不带 GROUPBY子句始终只返回一行数据,即使 输入数据为零行。