两个 COUNT 的百分比
Percentage from two COUNTs
我有这个 sparql 查询:
SELECT DISTINCT (COUNT(?bw) AS ?total) (COUNT(?bw_bad) AS ?total_bad) WHERE
{
{
SELECT ?bw WHERE
{
?bw unt:has_bwid ?id
}
}
UNION
{
SELECT ?bw_bad WHERE
{
?bw_bad unt:has_rbdname ?rbd_name_bad .
?bw_bad unt:has_concie_0 ?concie_0 .
FILTER(?concie_0 > 40)
}
}
}
给出:
total total_bad
"2155"^^<http://www.w3.org/2001/XMLSchema#integer> "46"^^<http://www.w3.org/2001/XMLSchema#integer>
我想计算它们的百分比,即 (46 / 2155 * 100) 2.13%。我该怎么做?我不关心性能。
我的尝试:
SELECT ((COUNT(?bw_bad) AS ?total_bad)/(COUNT(?bw) AS ?total)*100) WHERE
给出了这个语法错误:
Encountered " "as" "AS "" at line 10, column 34. Was expecting one of: ")" ... "=" ... "!=" ... ">" ... "<" ... "<=" ... ">=" ... "||" ... "&&" ... "+" ... "-" ... "*" ... "/" ... "in" ... "not in" ... ... ... ... ... ... ...
问题是双重的:您在 计算期间 将聚合的中间结果分配给变量,然后实际上没有将最终结果分配给变量。您应该改为执行以下操作:
SELECT (COUNT(?bw_bad)/(COUNT(?bw)*100) as ?percentage)
改变这个:
SELECT ((COUNT(?bw_bad) AS ?total_bad)/(COUNT(?bw) AS ?total)*100) WHERE
对此:
SELECT (COUNT(?bw_bad)* 100 / (COUNT(?bw)) as ?total) WHERE
您 select 中的 AS
正在为聚合结果分配名称。由于您在计算中使用聚合,因此无需命名它们,这就是不允许语法的原因。
使用子select几乎总是错误的,除非它们被用来计算周围查询所需的聚合。在这种情况下您没有这样做,因此您可以删除子 selects 以获得更有效的查询:
SELECT (((COUNT(?bw_bad)/COUNT(?bw))*100) AS ?total_bad)
WHERE
{
{
?bw unt:has_bwid ?id .
}
UNION
{
?bw_bad unt:has_rbdname ?rbd_name_bad .
?bw_bad unt:has_concie_0 ?concie_0 .
FILTER(?concie_0 > 40)
}
}
我有这个 sparql 查询:
SELECT DISTINCT (COUNT(?bw) AS ?total) (COUNT(?bw_bad) AS ?total_bad) WHERE
{
{
SELECT ?bw WHERE
{
?bw unt:has_bwid ?id
}
}
UNION
{
SELECT ?bw_bad WHERE
{
?bw_bad unt:has_rbdname ?rbd_name_bad .
?bw_bad unt:has_concie_0 ?concie_0 .
FILTER(?concie_0 > 40)
}
}
}
给出:
total total_bad
"2155"^^<http://www.w3.org/2001/XMLSchema#integer> "46"^^<http://www.w3.org/2001/XMLSchema#integer>
我想计算它们的百分比,即 (46 / 2155 * 100) 2.13%。我该怎么做?我不关心性能。
我的尝试:
SELECT ((COUNT(?bw_bad) AS ?total_bad)/(COUNT(?bw) AS ?total)*100) WHERE
给出了这个语法错误:
Encountered " "as" "AS "" at line 10, column 34. Was expecting one of: ")" ... "=" ... "!=" ... ">" ... "<" ... "<=" ... ">=" ... "||" ... "&&" ... "+" ... "-" ... "*" ... "/" ... "in" ... "not in" ... ... ... ... ... ... ...
问题是双重的:您在 计算期间 将聚合的中间结果分配给变量,然后实际上没有将最终结果分配给变量。您应该改为执行以下操作:
SELECT (COUNT(?bw_bad)/(COUNT(?bw)*100) as ?percentage)
改变这个:
SELECT ((COUNT(?bw_bad) AS ?total_bad)/(COUNT(?bw) AS ?total)*100) WHERE
对此:
SELECT (COUNT(?bw_bad)* 100 / (COUNT(?bw)) as ?total) WHERE
您 select 中的 AS
正在为聚合结果分配名称。由于您在计算中使用聚合,因此无需命名它们,这就是不允许语法的原因。
使用子select几乎总是错误的,除非它们被用来计算周围查询所需的聚合。在这种情况下您没有这样做,因此您可以删除子 selects 以获得更有效的查询:
SELECT (((COUNT(?bw_bad)/COUNT(?bw))*100) AS ?total_bad)
WHERE
{
{
?bw unt:has_bwid ?id .
}
UNION
{
?bw_bad unt:has_rbdname ?rbd_name_bad .
?bw_bad unt:has_concie_0 ?concie_0 .
FILTER(?concie_0 > 40)
}
}