PostgreSQLクエリの結果を、真のOR句の数で並べ替え/ランク付けする必要があります。たとえば、次のようなクエリが与えられます
SELECT * FROM mytable WHERE cond1 OR cond2 OR cond3 ORDER BY rank DESC
満たされた条件の数に基づいて結果をランク付けする必要があります。また、ビュー/ストアドプロシージャを使用してこの問題を解決するアプローチも大歓迎です。
PostgreSQLクエリの結果を、真のOR句の数で並べ替え/ランク付けする必要があります。たとえば、次のようなクエリが与えられます
SELECT * FROM mytable WHERE cond1 OR cond2 OR cond3 ORDER BY rank DESC
満たされた条件の数に基づいて結果をランク付けする必要があります。また、ビュー/ストアドプロシージャを使用してこの問題を解決するアプローチも大歓迎です。
条件を繰り返して追加します。
SELECT * FROM mytable
WHERE fld = 'A' OR fldB = CURRENT_DATE OR fldC = 7
ORDER BY
(fld = 'A')::int + (fldB = CURRENT_DATE)::int + (fldC = 7)::int
DESC
多分このような何か:
select *
from (
SELECT * , case when cond1 then 1 else 0 end
+ case when cond2 then 1 else 0 end
+ case when cond3 then 1 else 0 end as cond_count
FROM mytable
WHERE cond1
OR cond2
OR cond3
) t
order by cond_count desc
このソリューションの醜い点は、ステートメントにすべての条件が2回あることですが、現在、別のソリューションを考えることはできません。
The above query will check those conditions from the left side one by one i.e
if the cond1 is true then
return the results order by rank.
if cond1 is false and cond2 is true then
return the results order by rank.
if cond1 and cond2 both are false but cond3 is true
returns the results order by rank.
if all conditions are false then no result is returned.
So in brief it doesn't check all the conditions simultaneously for OR conditions.
Thanks.