SQL级别嵌套选择
我有点被SQLite3查询卡住了。 在下表中,我只想选择无效的行。 表包含不同国家/地区的服务器,每个服务器可以包含应用程序实例的数量。每个应用程序实例可以是有效的(例如,成功检查等等),也可以是无效的(如果控制出错) 我的桌子是这样的:SQL级别嵌套选择,sql,sqlite,Sql,Sqlite,我有点被SQLite3查询卡住了。 在下表中,我只想选择无效的行。 表包含不同国家/地区的服务器,每个服务器可以包含应用程序实例的数量。每个应用程序实例可以是有效的(例如,成功检查等等),也可以是无效的(如果控制出错) 我的桌子是这样的: Country ServerID Application Validation usa ABC1 Mailserver 1 usa ABC1 Mai
Country ServerID Application Validation
usa ABC1 Mailserver 1
usa ABC1 Mailserver 1
usa ABC1 Mailserver 0
usa ABC1 LDAPserver 0
usa ABC1 Voiceserver 0
usa ABC2 Voiceserver 1
canada BCA1 Mailserver 1
canada BCA2 LDAPserver 1
canada BCA2 Voiceserver 0
..............................................
现在我想选择至少有一个实例无效的国家、服务器ID和应用程序。因此,输出应为:
Country ServerID Application
usa ABC1 Mailserver
usa ABC1 LDAPserver
usa ABC1 Voiceserver
canada BCA2 Voiceserver
我已经为类似的问题编写了一些ruby脚本,但我有一个直接在数据库中解决它的想法。
我对一些内部连接、不同的查询等都不满意
所以,如果有人能伸出援助之手,我将非常高兴
提前感谢:)我会使用聚合:
select Country, ServerID, Application
from t
group by Country, ServerID, Application
having sum(case when validation = 0 then 1 else 0 end) > 0;
这将统计验证=0
且>0
确保至少有一行的行数
假设验证是一个仅接受0和1的数字,则还可以执行以下操作:
having sum(validation) < count(*)
这么做怎么样
select distinct Country, ServerID, Application
from table
where Validation = 0
条目失败的组具有最小的
验证值,因此您可以使用MIN()
select distinct Country, ServerID, Application
from table
where Validation = 0
SELECT Country, ServerID, Application
FROM MyTable
GROUP BY Country, ServerID, Application
HAVING MIN(validation) = 0;