\set ECHO none \pset format unaligned CREATE TABLE banzhaf_result AS SELECT name, city, banzhaf(c.provenance,p.provenance) FROM ( SELECT provenance() from (SELECT DISTINCT 1 FROM ( (SELECT DISTINCT city FROM personnel) EXCEPT (SELECT p1.city FROM personnel p1, personnel p2 WHERE p1.city = p2.city AND p1.id < p2.id GROUP BY p1.city ORDER BY p1.city) ) t ) u) AS c, (SELECT *, provenance() FROM personnel) AS p; SELECT remove_provenance('banzhaf_result'); SELECT name, city, ROUND(banzhaf::numeric,3) AS banzhaf FROM banzhaf_result ORDER BY city, name; DROP TABLE banzhaf_result; -- banzhaf computation in the non-probabilistic case. A probability is -- written once, so a different assignment means a different input gate -- per row: replace_input mints it and the row's provsql column carries -- it. The table stays TID, and personnel_name follows the tokens. UPDATE personnel SET provsql = provsql.replace_input(provsql, 1.); CREATE TABLE banzhaf_result AS SELECT name, city, banzhaf(c.provenance,p.provenance) FROM ( SELECT provenance() from (SELECT DISTINCT 1 FROM ( (SELECT DISTINCT city FROM personnel) EXCEPT (SELECT p1.city FROM personnel p1, personnel p2 WHERE p1.city = p2.city AND p1.id < p2.id GROUP BY p1.city ORDER BY p1.city) ) t ) u) AS c, (SELECT *, provenance() FROM personnel) AS p; SELECT remove_provenance('banzhaf_result'); SELECT name, city, ROUND(banzhaf::numeric,3) AS banzhaf FROM banzhaf_result ORDER BY city, name; DROP TABLE banzhaf_result; -- Put back the original probability values, the same way. UPDATE personnel SET provsql = provsql.replace_input(provsql, id*1./10); CREATE TABLE banzhaf_result1 AS SELECT city, provenance() FROM ( (SELECT DISTINCT city FROM personnel) EXCEPT (SELECT p1.city FROM personnel p1, personnel p2 WHERE p1.city = p2.city AND p1.id < p2.id GROUP BY p1.city ORDER BY p1.city) ) t; SELECT remove_provenance('banzhaf_result1'); CREATE TABLE banzhaf_result2 AS SELECT * FROM banzhaf_result1, banzhaf_all_vars(provenance); SELECT city, ROUND(value::numeric,3) AS banzhaf FROM banzhaf_result2 ORDER BY city, banzhaf; DROP TABLE banzhaf_result1; DROP TABLE banzhaf_result2;