Du kan tilslutte "enum"-værdien for hver kolonne. (Det ser ud til at være det vigtigste, du mangler.)
I WHERE
klausul kan du derefter filtrere efter de ting, der skal være lig med 'TRUE'
.
Brug en ORDER BY
for de ting, der er 'MAYBE'
. Sammenlign dem med 'TRUE'
og cast den sammenligning til et integer
. Sum resultaterne af de støbte sammenligninger og sorter efter den sum faldende.
SELECT v.venue_name
FROM venue_table v
INNER JOIN response_enum_table rp
ON rp.id = v.parking
INNER JOIN response_enum_table rd
ON rd.id = v.decorations
INNER JOIN response_enum_table rh
ON rh.id = v.hotel
-- INNER JOIN response_enum_table rx
-- ON rx.id = v.x
-- INNER JOIN response_enum_table ry
-- ON ry.id = v.y
-- ...
WHERE rh.value = 'TRUE'
-- AND rx.value = 'TRUE'
-- ...
ORDER BY (rp.value = 'TRUE')::integer
-- + (ry.value = 'TRUE')::integer
-- ...
DESC;
Sidebemærkning:Postgres tilbyder selv enums som datatyper. Du kan ændre spillestedsbordets skema for at bruge disse, så ville sammenføjningerne ikke være nødvendige.