各列の「列挙型」値を結合できます。 (それがあなたが見逃している主なもののようです。)
WHERE
次に、'TRUE'
と等しくなければならないものをフィルタリングできる句 。
ORDER BY
を使用する 'MAYBE'
であるもののために 。それらを'TRUE'
と比較してください その比較をinteger
にキャストします 。キャストされた比較の結果を合計し、その合計を降順に並べ替えます。
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;
補足:Postgresはデータ型自体として列挙型を提供します。これらを使用するように会場テーブルのスキーマを変更できれば、結合は必要ありません。