U kunt de "enum"-waarde voor elke kolom samenvoegen. (Dat lijkt het belangrijkste te zijn dat je mist.)
In de WHERE
clausule kunt u vervolgens filteren op de dingen die gelijk moeten zijn aan 'TRUE'
.
Gebruik een ORDER BY
voor de dingen die 'MAYBE'
. zijn . Vergelijk ze met 'TRUE'
en cast die vergelijking naar een integer
. Tel de resultaten van die gegoten vergelijkingen op en sorteer op die som aflopend.
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;
Kanttekening:Postgres biedt zelf opsommingen als gegevenstypen. Je zou het schema van de zaaltafel kunnen wijzigen om deze te gebruiken, dan zijn de joins niet nodig.