我正在使用我的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"
它工作正常(给我服务器名,今天的日期,解锁节点的数量和锁定节点的数量)......
...除了查询不匹配时(即没有提供名称的服务器名称)。在这种情况下,查询结果是
空值, “2013年4月15日”,NULL,NULL
(为了清楚起见,我添加了空值)
某些服务器没有节点是有效的。如果我从查询中删除“个案”,我不会得到任何查询结果,因此当我不想要时,它们会导致我得到一个结果。
如何在SQL查询中不返回任何内容,而不是在python中检测它,或事先查询计数?
答案 0 :(得分:3)
嗯添加
group by servername
如果没有匹配,会使空行消失,因为我偶然发现了。我在解释这个问题时遇到了麻烦,但我在 中认为这个在sqlite文档中涵盖了它:
如果SELECT语句是没有GROUP BY的聚合查询 子句,然后评估结果集中的每个聚合表达式 一次跨越整个数据集。每个非聚合表达式 对于任意选择的行,对结果集进行一次计算 数据集。每个使用相同的任意选择的行 非聚合表达。或者,如果数据集包含零行,那么 每个非聚合表达式针对包含的行进行评估 完全是NULL值。
通过评估聚合创建的单行结果集数据 结果集中的非聚合表达式和结果集中的非聚合表达式 没有GROUP BY子句的聚合查询。 没有的聚合查询 GROUP BY子句总是返回一行数据,即使是 输入数据为零行。